Tachschön!
Noch was:
Falls Du den Firebug benutzt, der kann verwirren:
Da steht bei einem Aufruf aus dem Chache auch immer der Status "200". Das die Daten aus dem Cache kommen erkennt man an der letzten Zeile: Wenn da was steht wie z.B. "118.8 KB (118.8 KB vom Cache)", dann stammen alle Daten aus dem Cache. Ob die einzelnen Ressourcen (HTML, CSS, JS-Files, Pics) aus dem Cache geladen wurden erkennst Du daran, dass in der Tabelle jeweils unter "RemoteIP" nichts steht. Kommen die Daten vom Server steht dort die IP.
Bei einem Refresh sollte bei den in die Webseite eingebundenen Ressourcen (CSS, JS, Pics) und einer der unten stehenden hinreichend ähnlichen Konfiguration der Status 304 stehen.
.htaccess (Beachte unten stehende Hinweise und Warnungen!):
<FilesMatch ".(png|jpg|jpeg|gif|bmp|ico|js|css|pdf)$">
<IfModule mod_headers.c>
Header set Cache-Control "max-age=604800,public,must-revalidate"
Header set Pragma "public" # für http-1.0 Proxy
</IfModule>
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault A604800
</IfModule>
</FilesMatch>
A)
Vorsicht, wenn Du einige der Ressourcen dynamisch erzeugst!
B)
Die Zahl 604800 repräsentiert eine Gültigkeit von einer Woche (7 Tage * 24 Stunden * 60 Minuten * 60 Sekunden), das "A" vor der Zahl bei ExpiresDefault repräsentiert die Anweisung, ab dem Zeitpunkt des Abrufes zu werten. "M" stände für Auswertung des Erstellungsdatums (Wird als header "LastModified" geliefert).
C)
Solltest Du mit Deiner .htaccess nicht umziehen, dann kannst Du ggf. auf <IfModule ...> </IfModule> verzichten. Ziehst Du jedoch mit dieser .htaccess auf einen Server um der Dir dies nicht bietet, dann bekommst einen 500er-Fehler und hast ggfs. heftig Probleme herauszufinden warum.
D) RTFM. Ich habe es nicht grundlos verlinkt.
Fred