Autor Zpráva
sony
Profil *
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");
Přijde mi to moc snadný na to aby to byla pravda. Děkuji
Davex
Profil
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 *
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
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 *
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");
Docela mě fascinuje, že si lidi dělají návody a přitom jen pletou lidi. Jak se to skutečně nasazuje? Odkaz, který dává jak zmínil Davex jako manuál nemůžu brát vážně, když poskytuje špatný kod :-)


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");
Myslíte, že toto může fungovat. Prosím, žádné odkazy na zavádějicí články. Zamotat hlavu si umím i sám.


Napíše mi někdo kdo doopravdy umí hlavičky a používá případně co dělají?
sony
Profil *
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 *
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
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 *
juriad:
Konečně česká a kloubná odpověd. Pokud je to hokus pokus, tak čím se vypisují hlavičky?
juriad
Profil
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 *
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");
Ukazuje toto:

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
Což znamená jestli se nepletu, že na to prdí.
Kubo2
Profil
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 *
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");
Nefunguje. To by mělo fungovat všude bez rozdílu a pokud ne, tak na co to je? Podle mě je to blbost. Pokud nejsou pevná pravidla pro všechny weby aby se zadala stránka do keše, tak je to blbě vymyšlený.
Davex
Profil
sony:
Nefunguje.
Ukaž.
sony
Profil *
Nemohu ukázat. Mám to prozatím jen na localhostu
Zechy
Profil
sony:
Bohužel ani localhost neni výmluva, abys ukázal živou ukázku :-)

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: