Po vytvorení webovej stránky možno budete chcieť stránku nastaviť tak, aby sa určitý obsah neukladal do vyrovnávajúcej pamäte webového prehliadača, keďže potrebujete, aby sa obsah aktualizoval často, napríklad každý deň. To je vhodné v prípade, ak na stránke ponúkate reštauračné menu vo formáte .PDF, ktoré sa mení každý deň a chcete mať istotu, aby sa na druhý deň návštevníkom nezobrazovala verzia .PDF súboru zo včera alebo z minulého týždňa, keďže už nie je aktuálna.
Samozrejme sú možnosti, ako si vyrovnávajúcu pamäť internetového prehliadača môžete vyčistiť, ale nie každému to napadne alebo to nepovažuje za praktické.
Tvorcovia webových stránok však na strane servera môžu zabrániť, aby sa určité typy súborov neukladali do vyrovnávajúcej pamäte (cache) prehliadačov návštevníkov, takže napr. na druhý deň návštevníci uvidia nový obsah. Toto môžeme dosiahnuť pomocou Apache modulu mod_expires.
Nastavenie nepoužívania vyrovnávajúcej pamäte
Tieto nastavenia môžete zrealizovať pomocou súboru .htaccess. Nižšie je príklad kódu, ktorý si môžete vložiť do daného súboru a zároveň aj nastaviť typy súborov, ktoré si neprajete ukladať do vyrovnávajúcej pamäte:
# VYPNI CACHE
<IfModule mod_headers.c>
Header set Cache-Control "no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires 0
</IfModule>
<FilesMatch "\.(css|flv|gif|htm|html|ico|jpe|jpeg|jpg|js|mp3|mp4|png|pdf|swf|txt)$">
<IfModule mod_expires.c>
ExpiresActive Off
</IfModule>
<IfModule mod_headers.c>
FileETag None
Header unset ETag
Header unset Pragma
Header unset Cache-Control
Header unset Last-Modified
Header set Pragma "no-cache"
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
Header set Expires "Thu, 1 Jan 1970 00:00:00 GMT"
</IfModule>
</FilesMatch>
Vysvetlenie:
-
no-cache: zabezpečí, aby si prehliadač overil pripojením na server, či obsah je stále aktuálny
-
max-age: nastavenie dĺžky v sekundách, ako dlho môže byť obsah uložený vo vyrovnávacej pamäti (cache) prehliadača. Po uplynutí tejto doby si prehliadač musí vyžiadať novú verziu obsahu zo servera. 0 znamená, že obsah by sa nemal nikdy ukladať do cache, resp. prehliadač sa bude zakaždým dopytovať na server po nový obsah.
-
no-store: príkaz naznačuje, že žiadna vyrovnávajúca pamäť akéhokoľvek druhu, by sa nemala načítavať
-
must-revalidate: funguje obdobne ako no-cache, obsah si načítava na základe nastavenia max-age, obsah si prehliadač preverí po uplynutí max-age. V prípade nuly, zakaždým.
Konkrétne typy súborov, ktoré nechcete, aby sa ukladali, určujete na riadku:
<FilesMatch "\.(css|flv|gif|htm|html|ico|jpe|jpeg|jpg|js|mp3|mp4|png|pdf|swf|txt)$">
V zozname si ponechajte len tie typy, ktoré skutočne nechcete, aby sa ukladali do cache, napr. ak nechcete, aby sa ukladali len súbory .PDF, tak si kód upravte takto:
<FilesMatch "\.(pdf)$">
Ak z nejakého dôvodu nechcete použiť súbor .htaccess, do hlavičky každej stránky si vložte tento kód, čo je alternatívny spôsob, ako nenačítavať obsah z vyrovnávajúcej pamäte:
<head>
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />
</head>
Nastavenie časového obdobia vyrovnávajúcej pamäte
Druhý variant, ktorý môžete použiť, je nastavenie obdobia, ako dlho sa majú jednotlivé typy súborov, resp. obsahy, držať v pamäti prehliadača bez ďalšej kontroly na serveri. Pri type súboru .PDF si všimnite, že sme nastavili jeden deň. Ostatné hodnoty môžete ponechať tak ako sú alebo si ich upravte podľa potreby. Obsah, ktorý nezvyknete často meniť, môžete ponechať na dlhšie obdobie, mesiace až roky, ostatný zvoľte kratší (hodiny, dni, max týždne):
## NASTAV CACHE
<IfModule mod_expires.c>
FileETag MTime Size
AddOutputFilterByType DEFLATE text/plain text/html text/xml text/css application/xml application/xhtml+xml application/rss+xml application/javascript application/x-javascript
ExpiresActive On
ExpiresByType text/html "access 600 seconds"
ExpiresByType application/xhtml+xml "access 600 seconds"
ExpiresByType text/css "access 1 month"
ExpiresByType text/javascript "access 1 month"
ExpiresByType text/x-javascript "access 1 month"
ExpiresByType application/javascript "access 1 month"
ExpiresByType application/x-javascript "access 1 month"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresByType application/pdf "access 1 day"
ExpiresByType image/x-icon "access 1 year"
ExpiresByType image/jpg "access 1 month"
ExpiresByType image/jpeg "access 1 month"
ExpiresByType image/png "access 1 month"
ExpiresByType image/gif "access 1 month"
ExpiresDefault "access 1 month"
</IfModule>
Dĺžku obdobia, ako dlho chcete alebo potrebujete, aby sa obsah udržiaval vo vyrovnávajúcej pamäti bez opätovnej kontroly na serveri, si môžete definovať nasledovne:
-
year/s
-
month/s
-
week/s
-
day/s
-
hour/s
-
minute/s
-
second/s
Je však možné si vytvoriť aj kombinácie, napr. chcete aby sa prehliadač po nový obsah .PDF súboru dopytoval každých 8 hodín a 30 minút:
ExpiresByType application/pdf "access 8 hours 30 minutes"
Obdobne si môžete nastaviť aj ďalšie typy súborov, podľa toho, ako často sa obnovujú.
Pri nastavovaní dĺžky obdobia môžete skúsiť ďalšie alternatívy.
Napríklad medzi zápisom
ExpiresByType application/pdf "access 1 day"
a
ExpiresByType application/pdf "access plus 1 day"
je rozdiel nasledovný:
-
access 1 day: nastavíte platnosť cache pre súbory (v našom prípade .PDF) na presne 1 deň od momentu, kedy bol obsah prístupný. Inak povedané, platnosť začne okamžite od času prístupu a vyprší presne o 1 deň.
-
access plus 1 day: "plus" znamená, že sa pridá 1 deň k aktuálnemu času prístupu. Inými slovami, cache vyprší po jednom dni od každého prístupu. Týmto spôsobom sa určí dynamickejší výpočet exspiračného času na základe prístupu k súboru.