Čo sú to dáta v pamäti? Čo znamená Clear Cache a čo robí?

Po prvé, čo je vyrovnávacia pamäť?

Všeobecne je vyrovnávacia pamäť (vyslovuje sa ako „hotovosť“) typ úložiska. Repozitár si môžete predstaviť ako úložisko. V armáde by to malo obsahovať zbrane, jedlo a ďalšie zásoby potrebné na uskutočnenie misie.

V informatike sa tieto „zásoby“ nazývajú zdroje, kde prostriedkami sú skripty, kód a obsah dokumentu. Posledná menovaná sa niekedy konkrétnejšie označuje ako „aktíva“, ako sú text, statické údaje, médiá a hypertextové odkazy, tu však použijem iba jeden výraz resources .

Rozdiel medzi vyrovnávacou pamäťou a inými typmi úložísk

Primárnym účelom pamäte cache je urýchliť načítanie zdrojov webovej stránky a skrátiť časy načítania stránky. Ďalším kritickým aspektom medzipamäte je zabezpečiť, aby obsahovala relatívne čerstvé údaje.

Tento článok sa bude zaoberať dvoma prevládajúcimi metódami ukladania do pamäte cache: ukladaním do pamäte cache prehliadača a sieťami Content Delivery Network (CDN).

Okrem kešiek prichádzajú do úvahy vo webových architektúrach aj ďalšie úložiská; často sú navrhnuté tak, aby držali obrovské množstvo dát. Nie sú však tak zameraní na výkonnosť vyhľadávania.

Napríklad Amazon Glacier je dátové úložisko, ktoré je určené na lacné ukladanie údajov, ale nie na rýchle načítanie. Databáza SQL je na druhej strane navrhnutá tak, aby bola flexibilná, aktuálna a rýchla, ale je zriedka lacná a zvyčajne nie rýchla ako vyrovnávacia pamäť.

Browser Cache: vyrovnávacia pamäť

Pamäťová vyrovnávacia pamäť ukladá prostriedky lokálne do počítača, na ktorom je spustený prehľadávač. Pokiaľ je prehľadávač aktívny, načítané zdroje sa uložia do fyzickej pamäte počítača (RAM) a prípadne aj na pevný disk.

Neskôr, keď budú pri návšteve webovej stránky potrebné presne rovnaké zdroje, prehľadávač vytiahne tieto prostriedky z medzipamäte namiesto zo vzdialeného servera. Pretože je vyrovnávacia pamäť uložená lokálne, v rýchlej pamäti sa tieto zdroje načítajú rýchlejšie a stránka sa načítava rýchlejšie.

Dôležitá je rýchlosť získavania zdrojov, ale takisto aj nevyhnutnosť, aby boli zdroje čerstvé. Zastaraný zdroj je zdroj, ktorý je zastaraný a už nemusí byť platný.

Súčasťou práce prehľadávača je identifikovať, ktoré zdroje v pamäti sú zastarané, a znova načítať tie, ktoré sú. Pretože webová stránka zvyčajne obsahuje zdroje, môže byť v pamäti cache kombinácia starej a čerstvej verzie.

Ako prehliadač vie, čo sa v pamäti cache nachádza?

Odpoveď nie je jednoduchá, ale existujú dva hlavné prístupy: vynechanie medzipamäte a pole hlavičky HTTP.

mlátenie cache

Taliani

Vyradenie pamäte cache je technika na strane servera, ktorá zaisťuje, že prehliadač načítava iba čerstvé zdroje. Robí to nepriamo.

Aj keď môže rušenie vyrovnávacej pamäte znieť dramaticky, skutočne nič nezničí a nedotkne sa ani toho, čo je už v prehliadači uložené. Všetko, čo vyradenie z vyrovnávacej pamäte urobí, je zmena URI pôvodného zdroja tak, aby sa prehliadaču javilo, že je zdroj úplne nový. Pretože vyzerá nový, nebude v pamäti prehliadača. Stará verzia zdroja v medzipamäti bude stále uložená v medzipamäti, ale nakoniec uschne a zomrie, aby sa k nej už nikdy nepristupovalo.

Povedzme, že mám webovú stránku, na www.foobar.com/about.htmlktorej je všetko o foobar.com a ktoré by ste niekedy chceli vedieť. Keď túto stránku navštívite, prehliadač ju uloží a zdroje s ňou spojené.

Neskôr web foobar.com odkúpi spoločnosť Quxbaz a obsah stránky prechádza významnými zmenami. Vyrovnávacia pamäť prehliadača nebude obsahovať tento nový obsah, môže sa však stále domnievať, že obsah, ktorý má, je aktuálny a nikdy sa ho nebude pokúšať načítať znova.

Čo robíte vy, správca webu Quxbaz, aby ste zabezpečili vytlačenie všetkého nového obsahu?

Pretože prehľadávač sa pri hľadaní položiek v pamäti cache spolieha na URI, ak sa zmení URI prostriedku, je to, akoby ho prehliadač nikdy nevidel, kým nenájde tento zdroj zo servera.

Takže zmenou URI prostriedku z www.foobar.com/about.htmlna www.foobar.com/about2.html(alebo do www.quxbaz.com/about.html) prehliadač nenájde žiadny prostriedok medzipamäte spojený s týmto URI a vykoná úplné načítanie zo servera. Zdroj môže byť v podstate rovnaký ako originál v starom identifikátore URI, ale prehliadač to nevie.

Nemusíte však meniť názov stránky. Vzhľadom k tomu, URI obsahuje tiež reťazec dotazu z definície, môžete pridať parameter verzie na URI: www.foobar.com/about.html?v=2hef9eb1.

V tomto prípade je parameter verzie v nastavený ako nová a nová vygenerovaná hodnota hash vždy, keď sa obsah zmení, alebo je spustený iným procesom, napríklad reštartom servera. Prehliadač zistí, že sa zmenil reťazec dotazu, a pretože reťazce dotazu môžu ovplyvniť to, čo sa vráti, načíta zo servera aktuálny zdroj.

Žiadna z týchto techník nebude fungovať, ak sa na starý URI priamo pristupuje zo záložky. Pokiaľ prehliadač nedostal pokyn na opätovné overenie identifikátora URI pri poslednej požiadavke uloženej v pamäti (alebo vypršal platnosť prostriedku uloženého v pamäti), neurobí úplné načítanie, aby obnovil svoju vyrovnávaciu pamäť. Týmto sa dostávame k ďalšej téme.

Polia hlavičiek HTTP

Každá požiadavka na zdroj má nejaké meta informácie známe ako hlavička. Naopak, ku každej odpovedi sú tiež priradené informácie o hlavičke.

V niektorých prípadoch prehliadač uvidí hodnoty hlavičky odpovede a zmení zodpovedajúce hodnoty v nasledujúcich hlavičkách požiadaviek. Medzi týmito hodnotami hlavičiek sú tie, ktoré ovplyvňujú spôsob vykonávania ukladania prostriedkov do pamäte cache v prehľadávači.

Žiadosti HEAD a podmienené žiadosti

Žiadosť HEAD je ako skrátená žiadosť GET alebo POST. Namiesto požiadavky na úplný zdroj požaduje požiadavka HEAD iba polia hlavičky, ktoré by sa inak vrátili na úplnú žiadosť.

Záhlavie prostriedku bude spravidla oveľa menšie (v počte celkových bajtov) ako s ním spojené údaje o prostriedku („telo“ odpovede). Informácie v hlavičke sú dostatočne informatívne, aby umožnili prehľadávaču určiť čerstvosť zdroja v jeho pamäti cache.

Požiadavky HEAD sa často používajú na overenie platnosti serverového prostriedku (tj. Či tento prostriedok stále existuje, a ak áno, bol aktualizovaný od posledného prístupu prehliadača?). Prehliadač použije to, čo je vo svojej medzipamäti, ak požiadavka HEAD naznačuje, že zdroj je platný, inak vykoná úplnú požiadavku GET alebo POST a obnoví svoju medzipamäť tým, čo sa vráti.

S podmienenou požiadavkou prehľadávač odošle do záhlavia polia popisujúce čerstvosť zdroja v pamäti. Tentokrát server určí, či je vyrovnávacia pamäť prehliadača stále čerstvá.

Ak je, server vráti odpoveď 304 iba s informáciami o hlavičke prostriedku a bez tela prostriedku (údajov). Ak sa zistí, že medzipamäť prehliadača je zastaraná, server vráti celých 200 správnych odpovedí.

Tento mechanizmus je rýchlejší ako použitie požiadaviek HEAD, pretože vylučuje možnosť vystavenia dvoch požiadaviek namiesto jednej.

Vyššie uvedené zjednodušuje, čo môže byť dosť komplikovaný proces. Do vyrovnávacej pamäte je zapojených veľa dolaďovaní, ale všetko sa ovláda prostredníctvom polí hlavičiek, z ktorých najdôležitejšie je riadenie medzipamäte.

Cache-Control

Pri odpovedi na požiadavku server odošle do prehliadača polia hlavičiek, ktoré označujú, aké správanie by sa malo prispôsobiť pri ukladaní do pamäte cache. Ak načítam stránku na //en.wikipedia.org/wiki/Uniform_Resource_Identifier, odpoveď obsahuje toto v jej hlavičkovom zázname:

cache-control: private, s-maxage=0, max-age=0, must-revalidate 

private znamená, že do pamäte cache sa má obsah dokumentu ukladať iba prehliadač.

s-maxage a max-age sú nastavené na 0 . Hodnota s-maxage je pre proxy servery s cache, zatiaľ čo max-age je určený pre prehliadač. Vplyv nastavenie max-age sám je, že cache zdroj vyprší okamžite, ale napriek tomu sa môžu naďalej používať (hoci Stale) pri opätovné načítanie stránky, zatiaľ čo v rovnakej relácii prehliadača.

Zastaralý zdroj môže byť znovu validovaný prostredníctvom požiadavky HEAD, po ktorej môže v závislosti od odpovede nasledovať žiadosť GET alebo POST. Must-revalidate smernice príkazy prehliadača na obnovenie platnosti vyrovnávacej pamäte zdroj, ak je zastaraná.

Pretože v tomto prípade je maximálny vek nastavený na 0 , zdroj v pamäti sa po prijatí okamžite zastaví. Kombinácia týchto dvoch smerníc je ekvivalentná jednej direktíve no-cache .

Tieto dve nastavenia zaisťujú, že prehľadávač vždy opätovne overí zdroj v pamäti, či už je v rovnakej relácii alebo nie.

Príkazy na kontrolu vyrovnávacej pamäte sú veľmi rozsiahle a miestami neprehľadné - sú témou samy o sebe. Kompletný zdokumentovaný zoznam smerníc nájdete tu.

E-tag

Toto je token, ktorý server odošle a prehľadávač si ho uchová až do ďalšej žiadosti. Používa sa iba vtedy, keď prehliadač vie, že vypršala životnosť pamäte cache zdroja.

E-tagy sú serverom generované hodnoty hash, ktoré ako zárodok často používajú fyzický názov súboru prostriedku a dátum poslednej zmeny na serveri. Keď sa aktualizuje zdrojový súbor, zmení sa zmenený dátum a vygeneruje sa nová hodnota hash a odošle sa do hlavičky odpovede na žiadosť.

Ďalšie značky hlavičiek ovplyvňujúce ukladanie do pamäte cache

Platnosť značiek hlavičky vyprší a posledná zmena je takmer zastaraná. Väčšina serverov ich však stále posiela kvôli spätnej kompatibilite so staršími prehliadačmi. Príklad:

expires: Thu, 01 Jan 1970 00:00:00 GMT last-modified: Sun, 01 Mar 2020 17:59:02 GMT 

Tu je platnosť nastavená na nultý dátum (historicky z operačného systému UNIX). To znamená, že platnosť prostriedku okamžite vyprší, rovnako ako to urobí max-age = 0 . Last-modified oznámi prehliadaču, kedy bola v zdroji vykonaná najnovšia aktualizácia, ktorú potom môže použiť na rozhodnutie, či by ju mal znovu načítať a nie použiť hodnotu medzipamäte.

Vynútenie obnovenia medzipamäte z prehliadača

Čo je ťažké načítanie?

Tvrdé opätovné načítanie vynúti opätovné načítanie všetkých zdrojov na stránke, či už ide o obsah, skripty, štýly alebo médiá. Skoro všetko, však?

Niektoré zdroje nemusia byť na stránke výslovne uvedené. Namiesto toho sa dajú načítať dynamicky, zvyčajne po načítaní všetkého explicitného.

Prehliadač vopred nevie, že sa tak stane, a keď sa tak stane, neskoršie žiadosti (zvyčajne iniciované skriptmi) budú stále používať kópie týchto zdrojov v medzipamäti, ak sú dostupné.

Čo je to čistá vyrovnávacia pamäť a pevné načítanie?

Táto operácia vymaže celú vyrovnávaciu pamäť prehľadávača, čo má rovnaký efekt ako tvrdé opätovné načítanie, ale okrem toho spôsobí načítanie aj dynamicky načítaných zdrojov - v vyrovnávacej pamäti napokon nič nie je, takže nie je na výber!

Siete na doručovanie obsahu: vyrovnávacia pamäť s geografickým umiestnením

Sieť CDN nie je iba cache, ale jednou z jej úloh je aj ukladanie do pamäte cache. Sieť CDN ukladá údaje na geograficky distribuovaných miestach, takže sa skracujú časy spiatočných letov do a z geograficky lokálneho prehliadača.

Požiadavky prehľadávača sú smerované do blízkej CDN, čím sa skracujú údaje o fyzickej odpovedi na vzdialenosť, ktoré je potrebné prekonať. Sieť CDN sú tiež schopné zvládnuť veľké množstvo prenosu a poskytujú zabezpečenie pred niektorými typmi útokov.

Sieť CDN získava svoje zdroje prostredníctvom internetového výmenného bodu (IXP), uzlov, ktoré sú súčasťou chrbtovej kosti Internetu (veľkými písmenami). Existujú kroky, ktoré je potrebné urobiť, aby ste nastavili smerovanie požiadaviek tak, aby smerovali na sieť CDN namiesto hostiteľského servera. Ďalším krokom je zabezpečiť, aby sieť CDN mala aktuálny obsah vašej webovej stránky.

Za starých čias väčšina sietí CDN podporovala metódu push: webová stránka tlačila nový obsah do centra CDN, ktoré sa potom distribuovalo do geograficky rozptýlených uzlov.

V dnešnej dobe väčšina CDN používa vyššie popísané protokoly ukladania do pamäte cache (alebo podobné) na 1) stiahnutie nových zdrojov a 2) obnovenie existujúcich. Prehliadač má stále svoju vyrovnávaciu pamäť a nič z toho sa nemení. CDN robí iba to, aby tieto prevody nových zdrojov boli rýchlejšie.