Autor | Zpráva | ||
---|---|---|---|
midlan Profil |
Ahoj,
potřebuji radu jak správně nacachovat výstup z PHP. Konkrétně se jedná o malý generátor obrázků. Zkoušel jsem dohledat hotové řešení, ale nejsem z toho moudrý. Potřeboval bych obrázek kešovat na jeden den, s tím že by se server průběžně ptal jestli nedošlo ke změně. Ne že by ke změně obsahu docházelo často, ale když k ní dojde, je potřeba aby se změna projevila hned. Url vedoucí na ten skript má cca takový tvar: http://www.example.com/generuj?barva=..&text=... Zvláštní jsou hlavičky které posílá prohlížeč: Accept:image/webp,*/*;q=0.8 Accept-Encoding:gzip, deflate, sdch Accept-Language:cs-CZ,cs;q=0.8 Cache-Control:no-cache Connection:keep-alive Pragma:no-cache Vypadá to, že pokaždé chce novou verzi. Jak ho tedy donutit kešovat? Díky za rady. EDIT: Potřebuji ještě druhou verzi cachování bez dotazování serveru na změny pro neměnné obrázky (taky vygenerované). |
||
Davex Profil |
#2 · Zasláno: 24. 7. 2015, 21:13:17
midlan:
„Potřeboval bych obrázek kešovat na jeden den“ Posílej upravenou hlavičku Cache-Control s dobou trvanlivosti (čas v sekundách).
„s tím že by se server průběžně ptal jestli nedošlo ke změně“ Koho se má server ptát a jak by to udělal? „Ne že by ke změně obsahu docházelo často, ale když k ní dojde, je potřeba aby se změna projevila hned.“ Pokud chceš, aby se změna projevila hned, tak se musí ve skriptu implementovat validace pomocí hlaviček If-Modified-Since nebo If-None-Match , což znamená posílat s obrázkem Last-Modified a ETag . V tomto směru by ti měl pomoci Kešovací návod nebo starší příklad, kde bych zvýšil hodnotu u max-age .
|
||
Časová prodleva: 3 dny
|
|||
midlan Profil |
Davex:
Díky za řešení, něco takového už jsem zkoušel ale nefungovalo. Stejně tak nefunguje ani tohle. Prohlížeč tahá při každém zobrazení stránky s generovanými obrázky všechny znovu ze serveru. Přitom hlavičky odpovědi se zdají v pořádku: Cache-Control:public, max-age=86400 Connection:Keep-Alive Content-Length:158013 Content-Type:image/png Date:Tue, 28 Jul 2015 06:54:00 GMT Expires:Wed, 29 Jul 2015 06:54:00 GMT Keep-Alive:timeout=5, max=90 Server:Apache/2.4.10 (Debian) Vlastně se tak dívám a necachují se ani ostatní obrázky na stránce, které k tomu mají i lepší hlavičky: Accept-Ranges:bytes Cache-Control:max-age=604800, public Connection:Keep-Alive Content-Length:31476 Content-Type:image/jpeg Date:Tue, 28 Jul 2015 07:01:29 GMT ETag:"b16-7af4-4fefedb67bdc0" Expires:Tue, 11 Aug 2015 07:01:29 GMT Keep-Alive:timeout=15, max=94 Last-Modified:Fri, 25 Jul 2014 06:41:03 GMT Server:Apache/2.2.22 (Debian) Čím je to způsobeno? Prohlížeč mám Chrome Verze 44.0.2403.89 m //EDIT K původní zprávě: server se nikoho ptát neměl, mělo tam být napsáno prohlížeč. //EDIT2 tak jsem ještě vyzkoušel Firefox a v něm cachování funguje jak má. Zkouešl jsem v Chrome ještě jiné známé weby a vypadá to, že (alespoň u mě) necachuje vůbec nic. |
||
Kajman Profil |
A kontrolujete cachování v rámci stejného tabu?
|
||
Keeehi Profil |
#5 · Zasláno: 28. 7. 2015, 10:56:22
V okně vývojářských nástrojů v Chrome v kterém to asi kontrolujete je možnost vypnout keš, když je otevřené. Nemůže to být tím?
|
||
midlan Profil |
#6 · Zasláno: 28. 7. 2015, 11:27:25
Keeehi:
Perfektní už to cachuje! Díky! Tak problém vypadá vyřešený. |
||
Časová prodleva: 9 let
|
0