Autor | Zpráva | ||
---|---|---|---|
sony Profil * |
#1 · Zasláno: 30. 11. 2013, 10:28:00
Dobrý den,
chci se zeptat zda je doopravdy možné kešovat stránku jen za pomocí tohoto: header("Cache-Control: must-revalidate"); $offset = 60 * 60 * 24 * 3; header("Expires: " . gmdate("D, d M Y H:i:s", time() + $offset) . " GMT"); |
||
Davex Profil |
#2 · Zasláno: 30. 11. 2013, 13:50:04
Toto moc dobře fungovat nebude, protože první řádek znamená, že se má při každém načtení kontrolovat platnost, ale neuvádíš
Last-Modified nebo ETag podle kterých by se pak ve skriptu mohlo rozhodnout, zda má poslat obsah znova nebo jen stavový kód 304 Not Modified.
Přečti si Kešovací návod. |
||
sony Profil * |
#3 · Zasláno: 30. 11. 2013, 13:52:48 · Upravil/a: sony
Právě odtud to mám.Takže nemusím někam dávat trasu úložiště? Vážně stačí jen v php takový kousek kodu?
Tam je právě uvedený tento kod. Pokud se to nějak pere, tak je článek špatný :-) |
||
Davex Profil |
#4 · Zasláno: 30. 11. 2013, 14:05:26
sony:
„Takže nemusím někam dávat trasu úložiště?“ Pod tím si představuješ co? „Vážně stačí jen v php takový kousek kodu?“ Záleží na tom, co od toho očekáváš. „Tam je právě uvedený tento kod. Pokud se to nějak pere, tak je článek špatný :-)“ To je jen příklad použití. Článek je třeba přečíst celý a při praktickém použití je nutné trochu se zamyslet. |
||
sony Profil * |
#5 · Zasláno: 30. 11. 2013, 14:09:27 · Upravil/a: sony
Třeba tohle je zajímavé a určitě nefunkční:
header("Expires: Mon, 26 Jul 1990 05:00:00 GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); Tohle už vypdá lépe: header("Expires: ".gmdate("D, d M Y H:i:s", time() + 3600)." GMT"); header("Pragma: cache"); header("Cache-Control: max-age=3600"); Napíše mi někdo kdo doopravdy umí hlavičky a používá případně co dělají? |
||
sony Profil * |
#6 · Zasláno: 30. 11. 2013, 15:20:12
To mi nikdo nedá lepší zbran než zavádějicí článek?
|
||
juriad Profil |
Nejlepší zbraní je definice: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html. Přečti si také další sekce toho RFC.
Tam máš přesný popis všech hlaviček; ty pomocí nich jen poskládáš funkcionalitu. |
||
sony Profil * |
#8 · Zasláno: 30. 11. 2013, 15:40:56 · Upravil/a: sony
Super a česká verze by nebyla? Já se ptám na návod a místo toho dostanu drtič nervů (zavádějící článek a ted ještě angličtina). Menší čočky mi dát nemůžete?
To mi nikdo nenapíše funkční hlavičky co už někdo má ověřenou funkčnost? Chápu to je zdejší know how :-) |
||
juriad Profil |
#9 · Zasláno: 30. 11. 2013, 15:53:26
sony:
V případě cachování se dostáváš dost hluboko do podrobností o fungovaní protokolu HTTP. Nemůžeš tedy čekat, že budou existovat české zdroje. Vem si papír a namaluj si schéma tří požadavků: 1. požadavek simuluje první navštívení stránky (žádné informace o ní nemá): co asi tak prohlížeč pošle nebo nepošle za hlavičky 2. požadavek simuluje druhou návštěvu stránky (má ji uloženou v cachi); ptá se tedy, jestli se nezměnila; zase si rozeber hlavičky 3. požadavek simuluje pozdější návštěvu (stránka se mezitím změnila); jak server tuto skutečnost pozná Z toho „nekvalitního návodu“ si vypiš použité hlavičky a zjisti si, co znamenají a co způsobují. Jiné hlavičky nejspíš potrebovat nebudeš. Ve všech třech případech se zamysli, které hlavičky asi tak má server poslat. Nic víc v tom není. On nejde napsat návod stylu: toto dej na začátek stránky a ono se to bude samo cachovat; na cachování můžou být různé nároky. |
||
sony Profil * |
#10 · Zasláno: 30. 11. 2013, 16:01:43
juriad:
Konečně česká a kloubná odpověd. Pokud je to hokus pokus, tak čím se vypisují hlavičky? |
||
juriad Profil |
#11 · Zasláno: 30. 11. 2013, 16:09:27
Hlavičky si můžeš vypsat třeba ve FireBugu nebo jiném vývojářském nástroji v prohlížeči. Na kartě Síť (Net) uvidíš, co odeslal prohlížeč a co poslal server zpět.
|
||
sony Profil * |
#12 · Zasláno: 30. 11. 2013, 16:24:01
Děkuju, firebug mi u kodu:
header("Expires: ".gmdate("D, d M Y H:i:s", time() + 3600)." GMT"); header("Pragma: cache"); header("Cache-Control: max-age=3600"); Cache-Control no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Connection Keep-Alive Content-Type text/html Date Sat, 30 Nov 2013 15:20:52 GMT Expires Thu, 19 Nov 1981 08:52:00 GMT Keep-Alive timeout=5, max=54 Pragma no-cache Server Apache/2.4.4 (Win32) OpenSSL/1.0.1e PHP/5.5.1 Transfer-Encoding chunked X-Powered-By PHP/5.5.1 Hlavičky požadavkuzobrazit zdroj Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Encoding gzip, deflate Accept-Language cs,en-us;q=0.7,en;q=0.3 Cache-Control max-age=0 Connection keep-alive Cookie PHPSESSID=iah017k8bbn3v0kmvlokhf9vm3 Host localhost Referer http://localhost/ User-Agent Mozilla/5.0 (Windows NT 6.1; rv:25.0) Gecko/20100101 Firefox/25.0 |
||
Kubo2 Profil |
#13 · Zasláno: 30. 11. 2013, 23:18:49
sony:
Radšej daj screenshot, z tých nepodarene skopírovaných klikov-hákov sa ťažko číta. |
||
Davex Profil |
sony:
„Což znamená jestli se nepletu, že na to prdí.“ Tvoje hlavičky se vůbec neodešlou, protože pravděpodobně funkci header() spouštíš moc pozdě - až po odeslání obsahu stránky (viz headers already sent…). Zároveň používáš session a je zapnutý session cache limiter, který posílá hlavičky zamezující kešování, což je celkem rozumné, protože při používání sessions (nebo obecně pokud se obsah stránky mění v závislosti na hodnotě cookies) většinou nechceš stránky kešovat.
A nepoužívej Pragma: cache . Jediná používaná hodnota je Pragma: no-cache , která sloužila k zamezení kešování u starých prohlížečů, které ještě nerozuměly HTTP/1.1 a Cache-Control .
|
||
sony Profil * |
#15 · Zasláno: 1. 12. 2013, 06:26:05 · Upravil/a: sony
bezva, ničemu nerozumím a tím to končí. Hlavičky posílám jako první. Nebudu se v tom štourat. Když to nejde jednoduše, tak je to špatně vymyšlený a já nebudu riskovat, že ještě něco poseru. Vlastně jste mi odpověděli, že ten kodík je blbost a já se kvůli dvoum stránkám neposeru :-)
Jenom mi hlava nebere, že tohle: $offset = 60 * 60 * 24 * 3; header("Expires: " . gmdate("D, d M Y H:i:s", time() + $offset) . " GMT"); |
||
Davex Profil |
#16 · Zasláno: 1. 12. 2013, 12:05:57
|
||
sony Profil * |
#17 · Zasláno: 2. 12. 2013, 08:58:08
Nemohu ukázat. Mám to prozatím jen na localhostu
|
||
Zechy Profil |
#18 · Zasláno: 2. 12. 2013, 09:19:48
sony:
Bohužel ani localhost neni výmluva, abys ukázal živou ukázku :-) |
||
Časová prodleva: 10 let
|
0