ETag / Expires: Probleme mit Chrome
Eddie
- https
Hallo allerseits,
ich dachte eigentlich, ich hätte die ETags und die Expires-Header soweit im Griff, aber das Verhalten von Firefox und Chrome unterscheiden sich ziemlich.
Z.B. bei folgenden beiden Dateien:
http://cdn.umdiewelt.de/images/misc/c_logo_download.png (von einem Content Delivery Network, bei dem ich eigentlich dachte, das sollte von Haus aus korrekt eingestellt sein)
http://www.umdiewelt.de/photos/13522/7690/31/711651.jpg (von meinem eigenen Server)
Bei beiden Dateien sagt Firefox beim Reload "Status 200 ok" und dann sogar noch explizit: "Die Anfrage wurde direkt über den Cache abgewickelt, daher gibt es keine Antwort vom Server."
Chrome hingegen beharrt beim Reload darauf, nochmal beim Server anzufragen und liefert dann erst einen 304er Status! Das ist natürlich nicht das gewünschte Verhalten :-(
Könnt Ihr mir einen Tipp geben, was ich (bzw. das CDN) da falsch machen??? Oder liegt's am Chrome???
Eddie
P.S: Von der Verwendung von ETags wird ja generell abgeraten. Aber das CDN liefert saubere ETags, die nicht server-unique sind. Und mein eigener Server ist auch nur ein einziger Rechner, was also auch nicht gegen ETags spricht.
Sorry, das war nicht sehr bedienungsfreundlich! Hier die beiden Demo-Dateien mit href:
hi,
Könnt Ihr mir einen Tipp geben, was ich (bzw. das CDN) da falsch machen??? Oder liegt's am Chrome???
Eher eine vorsichtige Vermutung. Auf jeden Fall habe ich gesehen, dass sowohl Last-Modified und der Etag-Header geliefert werden. Mein FF sendet im Reload-(not forced)-Request daher sowohl ein If-Modified-Since als auch ein If-None-Match und bekommt den 304 wie gewünscht.
Es wäre zu untersuchen, welche Cache-relevanten Header ein anderer Browser sendet. Immerhin muss sich der Browser entscheiden, ob er die Seite aufgrund Last-Modified oder Etag in den Cache nimmt. D.h., hier bei Dir sind zwei Cache-Verfahren im Spiel. Für detaillierte Untersuchungen würde ich mal das Eine oder das Andere ausschalten.
MfG
ich dachte eigentlich, ich hätte die ETags und die Expires-Header soweit im Griff, aber das Verhalten von Firefox und Chrome unterscheiden sich ziemlich.
Einstellungssache und Handlungsphilosophie.
Chrome hingegen beharrt beim Reload darauf, nochmal beim Server anzufragen und liefert dann erst einen 304er-Status!
Den Status 304 liefert der Server. Und weil er mit 304 antwortet, liefert er auch keine Daten, nur den Kopf, insofern erscheint mir das Problem (wir reden hier in der Summe über etwa 400 zu übertragende Bytes) nicht gar so dramatisch.
Chrome ist halt etwas zu penibel, aber warum auch nicht, wenn der Benutzer schon explizit das Neuladen anfordert.
Oder, wenn man's andersrum sehen möchte: Firefox braucht eher mal einen Tritt, um vor dem Verfallsdatum geänderte Daten wirklich abzuholen.