Dynamische Bilder
lindner
- php
Hi,
ich arbeite gerade an einem PHP Script das Dynamische Bilder ausgibt,
und hab noch ein paar Probleme damit diese Bilder vom Browser Cachen zu lassen.
Die Bilder werden auch Serverseitig gecacht (readfile).
Pfad php Script (über mod_rewrite verändert):
http://www.linsinger.com/linsinger.com/image/669m316/media/2.jpg
Pfad gecachtes Image:
http://www.linsinger.com/linsinger.com/temp/s669x316_media_2.jpg
In den meisten Anleitungen für Dynamische Bilder wird ja einfach nur:
header("Content-Type: image/jpeg");
angegeben, was dann in meinem Fall zu folgenden Headers führt:
Generiert:
HTTP/1.1 200 OK
Date: Tue, 08 Jun 2010 08:58:46 GMT
Server: Apache
X-Powered-By: PHP/4.4.0
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0,pre-check=0
Pragma: no-cache
Set-Cookie: PHPSESSID=9bb7125ee5c00893b4df1d9326072b86; path=/
Connection: close
Transfer-Encoding: chunked
Content-Type: image/jpeg
Echte Jpg:
HTTP/1.1 200 OK
Date: Tue, 08 Jun 2010 09:01:07 GMT
Server: Apache
Last-Modified: Mon, 07 Jun 2010 12:03:27 GMT
eTag: "219fde-e26c-75dce1c0"
Accept-Ranges: bytes
Content-Length: 57964
Vary: Accept-Encoding
Connection: close
Content-Type: image/jpeg
Nach einigen Stöbern bin ich nun auf diesem Stand:
header("Content-Type: image/jpeg");
header("Cache-Control: public");
header("Pragma: cache");
header("Expires: ".gmdate("D, d M Y H:i:s",time()+86400)." GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s", $datumDerOriginalDatei)." GMT");
header("ETag: ".md5($InhaltDerOriginalDatei));
Was zu folgenden Headers führt:
HTTP/1.1 200 OK
Date: Tue, 08 Jun 2010 09:02:46 GMT
Server: Apache
X-Powered-By: PHP/4.4.0
Cache-Control: public
Pragma: cache
Expires: Wed, 09 Jun 2010 09:02:46 GMT
eTag: 9f9974d82450b9d46164acb1e80352c3
Set-Cookie: PHPSESSID=9f367857471d211a84b4ae8d09a11239; path=/
Last-Modified: Tue, 25 May 2010 17:32:52 GMT
Connection: close
Transfer-Encoding: chunked
Content-Type: image/jpeg
Allerdings scheint das generierte Bild immer noch nicht vom Browser
gecacht zu werden, an welchen Headers könnte das liegen?
thx, mfg lindsey
hi,
Allerdings scheint das generierte Bild immer noch nicht vom Browser
gecacht zu werden, an welchen Headers könnte das liegen?
Ein Browser schreibt den Cache, wenn die Datei mit den Headers
Etag:
Last-Modified:
Ausgeliefert wird. Ein Browser holt die Datei aus dem Cache, wenn bei einem erneuten Request serverseitig festgestellt wird, dass sich die im Request mitgegebenen Werte für
IF_NONE_MATCH
IF_MODIFIED_SINCE
nicht geändert haben, vorausgesetzt, der Server ist richtig konfiguriert. Es gibt jedoch auch Browser, die sind so eingestellt, dass sie gar nicht erst am Server nachfragen.
Hotti
Ein Browser schreibt den Cache, wenn die Datei mit den Headers
Etag:
Last-Modified:Ausgeliefert wird.
Die Beiden Headers werden ja ausgeliefert?
Ein Browser holt die Datei aus dem Cache, wenn bei einem erneuten Request serverseitig festgestellt wird, dass sich die im Request mitgegebenen Werte für
IF_NONE_MATCH
IF_MODIFIED_SINCEnicht geändert haben, vorausgesetzt, der Server ist richtig konfiguriert. Es gibt jedoch auch Browser, die sind so eingestellt, dass sie gar nicht erst am Server nachfragen.
Die Server werden wohl richtig konfiguriert sein,
das echte Jpg wird gecacht,
und über das readfile php Script wirds immer neu geladen.
Für das php Script wurde ja vom Server automatisch
Pragma und Cache-Control "no-cache" ausgeliefert,
mit welchen Werten überschreibt man das am besten?
thx, mfg
Hi,
eTag: 9f9974d82450b9d46164acb1e80352c3
Last-Modified: Tue, 25 May 2010 17:32:52 GMT
Und entsprechende conditional GET requests behandelt dein aufgerufenes PHP-Script auch passend?
Allerdings scheint das generierte Bild immer noch nicht vom Browser
gecacht zu werden, an welchen Headers könnte das liegen?
Vermutlich an denen, die dein Script ignoriert - bei der Anfrage durch den Client.
MfG ChrisB