Hallo,
ich stehe derzeit vor einem etwas ungewöhnlichen Problem, nämlich dass der IE das tut was ich von ihm erwarte aber Firefox nicht.
Folgende (vereinfachte) Situation:
https://xyz/random.php leitet auf ein zufällig ausgewähltes, php-generiertes Bild weiter:
W3 sagt: "The 303 response MUST NOT be cached, but the response to the second (redirected) request might be cacheable" - also genau was ich haben will. Doch weder mit 303 noch mit dem traditionellen 302 funktioniert es im Firefox.
Anfrage bei id=1:
Anfrage bei id=2:
Beide Bilder sind nun im Cache. Nun kommt die nächste Anfrage:
Sieht alles richtig aus (für id=2 ebenfalls), aber: Firefox bezieht das 304 not modified nicht auf die bild.php?id=x sondern auf die random.php, so dass immer nur das selbe Bild angezeigt wird. Er fragt also nach bild.php?id=2, bekommt "not modified" und zeigt dann aber nicht bild2 aus dem Cache an, sondern das Bild was eben gerad da ist, egal ob 1 oder 2.
IE und Opera hingegen verstehen was von ihnen gewollt wird und reagieren richtig.
Wenn ich anstatt Etag mit nocache-headern usw. arbeite, komme ich zum selben Ergebnis.
Hat jemand einen Vorschlag bzw. Erfahrung, wie man dieses Problem lösen kann?
Die Bilder bei jeder Anfrage neu zu generieren (also nie 304 zu senden) wäre natürlich möglich, aber eigentlich unnützer Rechenaufwand.
Danke,
Talion
ich stehe derzeit vor einem etwas ungewöhnlichen Problem, nämlich dass der IE das tut was ich von ihm erwarte aber Firefox nicht.
Folgende (vereinfachte) Situation:
https://xyz/random.php leitet auf ein zufällig ausgewähltes, php-generiertes Bild weiter:
bild.php generiert nun entsprechend der Id das Bild. Die Anfrage an random.php soll NIE zwischengespeichert werden (damit jedesmal ein neues zufällig gewähltes Ergebnis kommt), aber das Bild an sich soll gecached werden (andernfalls könnte ich es ja auch ohne Weiterleitung direkt ausgeben).GET /random.php HTTP/1.1
HTTP/1.x 303 See Other
Pragma: no-cache
Cache-Control: no-cache, must-revalidate
Expires: Thu, 01 Jan 1970 00:00:00
Location: https://xyz/bild.php?id=##zufall##
W3 sagt: "The 303 response MUST NOT be cached, but the response to the second (redirected) request might be cacheable" - also genau was ich haben will. Doch weder mit 303 noch mit dem traditionellen 302 funktioniert es im Firefox.
Anfrage bei id=1:
GET /bild.php?id=1 HTTP/1.1
HTTP/1.x 200 OK
Etag: 1
Anfrage bei id=2:
GET /bild.php?id=1 HTTP/1.1
HTTP/1.x 200 OK
Etag: 1
Beide Bilder sind nun im Cache. Nun kommt die nächste Anfrage:
GET /random.php HTTP/1.1
HTTP/1.x 303 See Other
Pragma: no-cache
Cache-Control: no-cache, must-revalidate
Expires: Thu, 01 Jan 1970 00:00:00
Location: https://xyz/bild.php?id=1
GET /bild.php?id=1 HTTP/1.1
If-None-Match: 1
HTTP/1.x 304 Not Modified
Sieht alles richtig aus (für id=2 ebenfalls), aber: Firefox bezieht das 304 not modified nicht auf die bild.php?id=x sondern auf die random.php, so dass immer nur das selbe Bild angezeigt wird. Er fragt also nach bild.php?id=2, bekommt "not modified" und zeigt dann aber nicht bild2 aus dem Cache an, sondern das Bild was eben gerad da ist, egal ob 1 oder 2.
IE und Opera hingegen verstehen was von ihnen gewollt wird und reagieren richtig.
Wenn ich anstatt Etag mit nocache-headern usw. arbeite, komme ich zum selben Ergebnis.
Hat jemand einen Vorschlag bzw. Erfahrung, wie man dieses Problem lösen kann?
Die Bilder bei jeder Anfrage neu zu generieren (also nie 304 zu senden) wäre natürlich möglich, aber eigentlich unnützer Rechenaufwand.
Danke,
Talion