Existuje štandard pre to, aké akcie F5 a Ctrl + F5 spúšťajú webové prehliadače?
Raz som robil pokus v IE6 a Firefoxe 2.x. Obnovenie F5 by spustilo požiadavku HTTP odoslanú na server s hlavičkou If-Modified-Since
, zatiaľ čo Ctrl + F5 by takúto hlavičku nemalo. Podľa môjho chápania sa F5 bude snažiť využiť obsah uložený v medzipamäti v čo najväčšej možnej miere, zatiaľ čo Ctrl + F5 má za cieľ vzdať sa všetkého obsahu uloženého v medzipamäti a celý obsah len znovu načítať zo serverov.
Dnes som si však všimol, že v niektorých najnovších prehliadačoch (Chrome, IE8) to už takto nefunguje. Ako F5, tak aj Ctrl + F5 posielajú hlavičku If-Modified-Since
.
Ako to má teda fungovať, alebo (ak neexistuje štandard) ako sa hlavné prehliadače líšia v tom, ako implementujú tieto funkcie obnovenia?
Záleží na prehliadači, ale správajú sa podobne.
Testoval som FF, IE7, Operu a Chrome.
F5 zvyčajne aktualizuje stránku len vtedy, ak je upravená. Prehliadač sa zvyčajne snaží čo najviac využívať všetky typy vyrovnávacej pamäte a do požiadavky pridáva hlavičku "If-modified-since". Opera sa líši tým, že posiela "Cache-Control: no-cache".
CTRL-F5 sa používa na vynútenie aktualizácie bez ohľadu na akúkoľvek vyrovnávaciu pamäť. IE7 pridáva "Cache-Control: no-cache", rovnako ako FF, ktorý pridáva aj "Pragma: no-cache". Chrome použije normálne "If-modified-since" a Opera tento kľúč ignoruje.
Ak si dobre pamätám, bol to Netscape, ktorý ako prvý prehliadač pridal podporu pre cache-control pridaním "Pragma: No-cache" pri stlačení CTRL-F5.
Upraviť: Aktualizovaná tabuľka
Nasledujúca tabuľka je aktualizovaná o informácie o tom, čo sa stane po kliknutí na tlačidlo refresh prehliadača'(po požiadavke Joel Coehoorn) a o "max-age=0" Cache-control-header.
Aktualizovaná tabuľka, 27. septembra 2010
┌────────────┬───────────────────────────────────────────────┐
│ UPDATED │ Firefox 3.x │
│27 SEP 2010 │ ┌────────────────────────────────────────────┤
│ │ │ MSIE 8, 7 │
│ Version 3 │ │ ┌─────────────────────────────────────────┤
│ │ │ │ Chrome 6.0 │
│ │ │ │ ┌──────────────────────────────────────┤
│ │ │ │ │ Chrome 1.0 │
│ │ │ │ │ ┌───────────────────────────────────┤
│ │ │ │ │ │ Opera 10, 9 │
│ │ │ │ │ │ ┌────────────────────────────────┤
│ │ │ │ │ │ │ │
├────────────┼──┼──┼──┼──┼──┼────────────────────────────────┤
│ F5│IM│I │IM│IM│C │ │
│ SHIFT-F5│- │- │CP│IM│- │ Legend: │
│ CTRL-F5│CP│C │CP│IM│- │ I = "If-Modified-Since" │
│ ALT-F5│- │- │- │- │*2│ P = "Pragma: No-cache" │
│ ALTGR-F5│- │I │- │- │- │ C = "Cache-Control: no-cache" │
├────────────┼──┼──┼──┼──┼──┤ M = "Cache-Control: max-age=0" │
│ CTRL-R│IM│I │IM│IM│C │ - = ignored │
│CTRL-SHIFT-R│CP│- │CP│- │- │ │
├────────────┼──┼──┼──┼──┼──┤ │
│ Click│IM│I │IM│IM│C │ With 'click' I refer to a │
│ Shift-Click│CP│I │CP│IM│C │ mouse click on the browsers │
│ Ctrl-Click│*1│C │CP│IM│C │ refresh-icon. │
│ Alt-Click│IM│I │IM│IM│C │ │
│ AltGr-Click│IM│I │- │IM│- │ │
└────────────┴──┴──┴──┴──┴──┴────────────────────────────────┘
Testované verzie:
Poznámky:
Verzia 3.0.6 posiela I a C, ale verzia 3.1.6 otvára stránku v novej karte, a vytvorí normálnu požiadavku len s "I".
Verzia 10.62 nerobí nič. Verzia 9.61 by mohla robiť C, pokiaľ to nebol preklep v mojej starej tabuľke.
Poznámka k prehliadaču Chrome 6.0.472: Ak vykonáte vynútené opätovné načítanie (ako napríklad CTRL-F5), správa sa to tak, ako keby bola url interne označená tak, aby sa vždy vykonalo vynútené opätovné načítanie. Príznak sa zruší, ak prejdete do adresného riadka a stlačíte enter.
Všeobecne povedané:
F5 vám môže zobraziť tú istú stránku, aj keď je obsah zmenený, pretože môže načítať stránku z vyrovnávacej pamäte. Ale Ctrl-F5 vynúti obnovenie vyrovnávacej pamäte a zaručí, že ak sa obsah zmení, dostanete nový obsah.
Keď používateľ stlačí F5 hoci nová požiadavka ide na webový server a dostane odpoveď aj na túto požiadavku. Ale keď je hlavička odpovede analyzovaná, skontroluje požadované informácie vo vyrovnávacej pamäti prehliadača. Ak platnosť požadovaných informácií vo vyrovnávacej pamäti nevypršala, potom sa tieto informácie obnovia z vyrovnávacej pamäte.
Keď používateľ klikne na CTRL-F5 aj vtedy nová požiadavka prejde na webový server a dostane odpoveď. Ale tentoraz, keď sa analyzuje hlavička odpovede, nekontroluje sa žiadna požadovaná informácia v medzipamäti a všetky aktualizované informácie sa prenesú len zo servera.