Ciao, da ciò che hai indicato e dal codice (che ho testato) non è chiaro a cosa ti riferisci esattamente. Sarebbe utile chiarire quale è il risultato che ottieni e quale invece quello che ti aspetti.

anche se ho messo che la larghezza debba occupare il 100%
Sul tuo codice non vedo particolari regole applicate per il dimensionamento di .header ma ad ogni modo, essendo un div (quindi un elemento block), questo di norma va ad estendersi già al 100% della larghezza disponibile.

Quello che invece noto, testando il tuo codice, è un "sovradimensionamento" di .footer in cui effettivamente hai applicato un width:100% ma risulta più largo del suo contenitore e del body stesso e quindi viene mostrata la barra di scorrimento orizzontale della pagina. E' forse questo il problema?

In qualunque caso è utile sapere che tale comportamento è dato dall'algoritmo di elaborazione del box model CSS che normalmente esclude il valore di padding e border dal calcolo delle dimensioni di un qualsiasi elemento. Tu infatti hai applicato un padding:15px che appunto crea un eccesso di 30px sulla larghezza totale di .footer (cioè 100% della larghezza del genitore più 15px a sinistra e altri 15px a destra).

Questo fattore è comunque una nozione di base del CSS riguardo il box model. Per ulteriori informazioni su tale argomento posso consigliarti questa guida:
http://www.html.it/pag/19463/box-sizing/

C'è da tener presente che questo è il normale comportamento riguardo il box model ma in generale, quantomeno nello sviluppo dei più moderni layout, viene applicata una proprietà (descritta anche su quella guida) che serve proprio ad "aggiustare" il calcolo delle dimensioni effettive in modo da comprendere padding e border. Si tratta di box-sizing applicata col valore border-box.

Puoi applicarla agli elementi che presenta questo problema, il tuo .footer o .header che sia, oppure applicarla in modo generale a tutti gli elementi della pagina. Fra i più comuni framework CSS viene infatti usata una regola del genere:
codice:
* {box-sizing: border-box;}
Che appunto non fa altro che applicare a ciascun elemento della pagina tale proprietà.

Consiglio inoltre di dare uno sguardo tra i link utili CSS (discussione in evidenza), se già non lo hai fatto; tra i primi capitoli (in particolare il capitolo 2) puoi trovare vari riferimenti a guide che spiegano i concetti di base e i meccanismi di funzionamento del CSS tra cui il box-model.

Buono studio e buon proseguimento.

... Ovviamente se il problema era un altro, prova a chiarire meglio.