PHP Caching

27o8

abgemeldet
2 Mai 2006
9.028
933
Das Präfix passt zwar nicht wirklich weil es nicht in php gemacht wird, sondern ich das über die .htaccess steuere, aber da man Caching ja auch per PHP beeinflussen kann habe ich das mal ausgewählt. ;)

Und zwar sende ich seit kurzem bei allen Bildern, erst einmal testweise, folgenden Header mit:

Code:
max-age=604800, public, must-revalidate

Laut Live HTTP Headers kommt das ganze auch durch:

Code:
HTTP/1.x 304 Not Modified
Date: Tue, 08 Dec 2009 16:57:59 GMT
Server: Apache/2.2.3 (Debian) mod_python/3.2.10 Python/2.4.4 PHP/5.2.0-8+etch15 mod_ssl/2.2.3 OpenSSL/0.9.8c mod_perl/2.0.2 Perl/v5.8.8
Connection: Keep-Alive
Keep-Alive: timeout=5, max=97
Etag: "e84032-129-d6b57a80"
Cache-Control: max-age=604800, public, must-revalidate

Aber die Bilder werden trotzdem bei jedem Seitenaufruf abgefragt :think: Aber das ist es ja was ich verhindern möchte. Ein Tool welches ich nutze sagt mir auch bei den Bildern wo ich den Header mitsende folgendes:
The following resources are explicitly non-cacheable. Consider making them cacheable if possible:

Was mache ich falsch? :think:
 
Wird denn dann trotzdem eine Anfrage an den Server gesendet? Dachte damit könnte man die HTTP Requests senken. Und wieso sagt mir das Tool (Google Page Speed für Firefox), dass die Bilder nicht cachebar sind :think:
 
Informier dich auch mal über den Unterschied zwischen "cache-control" und "expires", ich glaube mit letzterem wirst du glücklicher.
 
must-revalidate bedeutet, dass die Bilder bei jedem Aufruf neu geprüft werden müssen ;)
Dann hatte ich das doch richtig. :p Hatte jedoch noch etwas gegooglet, um nix falsch zu machen und bin auf folgende Seite gestoßen: https://www.kreativland.de/tipps/tag_info/tagtips8.htm dort steht folgendes:

  • must-revalidate: Instruiert Caches, Anweisungen hinsichtlich Caching strikt zu befolgen.
Ist ja dann wohl völliger Unsinn. :ugly: Also wenn ich must-revalidate ausbaue fällt der HTTP Query auch weg? :D
 
Hab mir das mit expires mal angeschaut, da muss man ja immer ein Datum angeben, damit ich das effektiv einsetzen könnte bräuchte ich da schon mod_expires.

Habe mir nun extra für das cachen mod_headers installieren lassen, kann ich das damit auch irgendwie machen?

Hab übrigens mal must-revalidate ausgebaut, und es erfolgen trotzdem weiterhin die Abfragen.
 
Also bei mir wird trotz expires header weiterhin abgefragt:

Code:
HTTP/1.x 304 Not Modified
Date: Wed, 09 Dec 2009 02:39:42 GMT
Server: Apache/2.2.3 (Debian) mod_python/3.2.10 Python/2.4.4 PHP/5.2.0-8+etch15 mod_ssl/2.2.3 OpenSSL/0.9.8c mod_perl/2.0.2 Perl/v5.8.8
Connection: Keep-Alive
Keep-Alive: timeout=5, max=100
Etag: "15e4216-a826-36cbcd00"
Expires: Thu, 11 Dez 2009 00:00:00 GMT
Cache-Control: public
Wenn ich dem Browser doch sage, dass sich das Bild erst wieder am Thu, 11 Dez 2009 00:00:00 ändern kann muss er doch nicht trotzdem ständig anfragen :think:

Aber was mir aufgefallen ist, mein Firefox sendet im GET Request folgendes mit:
Code:
Cache-Control: max-age=0
:hö:

Ich hab zwar keine Geschwindigkeitsprobleme auf meinen Seiten, aber es gibt halt Seiten mit vielen kleinen Icons und Smileys (Forum) und da gehen dann pro Reload mal eben ~50 Requests raus die man sich eigentlich sparen könnte. Und wenn die weg wären müsste sich die Seite ja noch schneller aufbauen, und den Server würde es auch entlasten, denn er muss nicht 50x checken ob sich ein Bild geändert hat :ugly:
 
Also unter Erweitert -> Netzwerk hab ich den "Offline Speicher" mit 150 MB drin stehen, und auch aktiviert. about:cache zeigt auch an, das schon einiges im Cache liegt.

Unter about:cache?device=disk sehe ich auch die Bilder um die es mir geht:think: also im Cache sind die definitiv
 
hast du mal ne Demo-Seite?

In der Webdeveloper-Toolbar ist unter Deaktivieren nicht zufällig "Cache deaktivieren" aktiviert? :biggrin:
 
Letzt endlich aber entscheidet der Browser. (Du hast keinen Einfluss darauf). Du kannst ja dem nur den Vorschlag dazu erteilen. Ich habe die Option "Bilder und Dateien immer neu laden" auf on gestellt, weil ich beim erstellen immer weider Grafiken austausche. In dem Moment würde dir keine Cacheanweisung was bringen.

Bei vielen Browsern ist es dann auch so, dass die den Header der Datei dennoch überprüfen! Ich glaube beim Firefox ist es so, dass er PHP Dokumente Grunsätzlich immer neu lädt. Wenn du eine html abrufst (dahinter via .htaccess vorgaugkelst es wäre eine) funzt es auf einmal.