Kaj so predpomnjeni podatki? Kaj pomeni Clear Cache in kaj počne?

Prvič, kaj je predpomnilnik?

Na splošno je predpomnilnik (izgovarja se "gotovina") vrsta skladišča. Repozitorij si lahko predstavljate kot skladišče. V vojski bi to moralo imeti orožje, hrano in druge zaloge, potrebne za nadaljevanje misije.

V računalništvu se te "zaloge" imenujejo viri, kjer so viri skripte, koda in vsebina dokumentov. Slednje se včasih bolj natančno imenuje "sredstva", kot so besedilo, statični podatki, mediji in hiperpovezave, vendar bom tukaj uporabil samo en izraz viri .

Razlika med predpomnilnikom in drugimi vrstami repozitorijev

Primarni namen predpomnilnika je pospešiti iskanje virov spletnih strani in s tem skrajšati čas nalaganja strani. Drug kritični vidik predpomnilnika je zagotoviti, da vsebuje razmeroma sveže podatke.

Ta članek bo zajemal dve razširjeni metodi predpomnjenja: predpomnjenje brskalnika in omrežja za dostavo vsebine (CDN).

Poleg predpomnilnikov v spletnih arhitekturah nastopajo tudi druga skladišča; pogosto so namenjene shranjevanju ogromnih podatkov. Vendar niso tako osredotočeni na uspešnost iskanja.

Na primer, Amazon Glacier je skladišče podatkov, ki je zasnovano za poceni shranjevanje podatkov, vendar ne za hiter dostop do njih. Baza podatkov SQL pa je zasnovana tako, da je prilagodljiva, posodobljena in hitra, vendar je redko poceni in običajno ne tako hitra kot predpomnilnik.

Predpomnilnik brskalnika: predpomnilnik

Predpomnilnik shrani vire lokalno v računalnik, v katerem se izvaja brskalnik. Medtem ko je brskalnik aktiven, bodo pridobljeni viri shranjeni v fizičnem pomnilniku računalnika (RAM) in morda tudi na trdem disku.

Kasneje, ko bodo pri ponovnem obisku spletne strani potrebni popolnoma enaki viri, jih bo brskalnik potegnil iz predpomnilnika namesto z oddaljenega strežnika. Ker je predpomnilnik shranjen lokalno v hitrem pomnilniku, se ti viri pridobijo hitreje in stran se naloži hitreje.

Bistvenega pomena je hitrost iskanja virov, toda tudi potreba po svežini virov. Zastareli vir je zastarel in morda ne bo več veljaven.

Del naloge brskalnika je ugotoviti, kateri predpomnjeni viri so zastareli, in znova pridobiti tiste, ki so. Ker ima spletna stran običajno vire za maj, je v predpomnilniku običajno mešanica zastarelih in svežih različic.

Kako brskalnik ve, kaj je zastarelo v predpomnilniku?

Odgovor ni preprost, vendar obstajata dva glavna pristopa: razbijanje predpomnilnika in polja glave HTTP.

razbijanje predpomnilnika

Italijani

Razbijanje predpomnilnika je tehnika na strani strežnika, ki zagotavlja, da brskalnik pridobi samo sveže vire. To počne posredno.

Čeprav se uničenje predpomnilnika morda sliši dramatično, v resnici nič ne uniči in se niti ne dotakne tistega, kar je v brskalniku že predpomnjeno. Vse, kar uniči predpomnilnik, je spremeniti URI izvirnega vira tako, da se brskalniku zdi, da je vir popolnoma nov. Ker je videti novo, ga ne bo v predpomnilniku brskalnika. Stara različica predpomnjenega vira bo še vedno predpomnjena, vendar bo sčasoma usahnila in umrla, nikoli več do nje.

Recimo, da imam spletno stran, na www.foobar.com/about.htmlkateri piše vse o foobar.com, kar bi kdaj želeli vedeti. Ko obiščete to stran, jo brskalnik predpomni in vire, povezane z njo.

Kasneje foobar.com odkupi korporacija Quxbaz, vsebina strani o tem pa se bistveno spremeni. Predpomnilnik brskalnika ne bo imel te nove vsebine, vendar bo kljub temu morda še vedno verjel, da je vsebina trenutna, in je ne bo poskušal ponovno pridobiti.

Kaj vi, spletni skrbnik Quxbaz, storite, da zagotovite, da bodo vse nove vsebine iztisnjene?

Ker se brskalnik pri iskanju elementov v predpomnilniku zanaša na URI, če se URI vira spremeni, je videti, kot da ga brskalnik še ni videl, preden gre po vir s strežnika.

Tako s spreminjanjem URI-ja vira iz www.foobar.com/about.htmlna www.foobar.com/about2.html(ali v www.quxbaz.com/about.html) brskalnik ne bo našel nobenega vira predpomnilnika, povezanega s tem URI-jem, in opravil popoln prenos s strežnika. Vir je lahko v bistvu enak originalu pod starim URI-jem, vendar brskalnik tega ne ve.

Vendar vam ni treba spremeniti imena strani. Ker URI tudi poizvedbi po definiciji, lahko dodate parameter različice na URI: www.foobar.com/about.html?v=2hef9eb1.

V tem primeru se parametru različice v nastavi nova, ustvarjena vrednost zgoščene vrednosti, kadar se vsebina spremeni ali jo sproži nek drug postopek, na primer ponovni zagon strežnika. Brskalnik vidi, da se je niz poizvedbe spremenil, in ker lahko nizi poizvedb vplivajo na to, kaj bo vrnjeno, bo s strežnika prejel posodobljen vir.

Nobena od teh tehnik ne bo delovala, če se do starega URI-ja neposredno dostopa iz zaznamka. Če brskalniku ni naročeno, da ponovno potrdi URI na zadnji predpomnjeni zahtevi (ali je predpomnjeni vir potekel), osveževanja predpomnilnika ne bo izvedel v celoti. To nas pripelje do naslednje teme.

Polja glave HTTP

Vsaka zahteva za vir vsebuje nekaj meta informacij, znanih kot glava. Nasprotno pa ima vsak odgovor tudi informacije o glavi.

V nekaterih primerih brskalnik vidi vrednosti glave odziva in spremeni ustrezne vrednosti v naslednjih glavah zahtev. Med temi vrednostmi glave so tiste, ki vplivajo na izvedbo predpomnjenja virov v brskalniku.

HEAD zahteve in pogojne zahteve

Zahteva HEAD je kot okrnjena zahteva GET ali POST. Namesto da zahteva celoten vir, zahteva HEAD zahteva le polja glave, ki bi jih sicer vrnili s popolno zahtevo.

Glava vira bo na splošno veliko manjša (v skupnem številu bajtov) kot z njim povezani podatki vira ("telo" odziva). Informacije v glavi so dovolj informativne, da lahko brskalnik določi svežino vira v predpomnilniku.

Zahteve HEAD se pogosto uporabljajo za preverjanje veljavnosti strežniškega vira (to pomeni, ali vir še vedno obstaja, in če je, ali je bil posodobljen od zadnjega dostopa do njega?). Brskalnik bo uporabil tisto, kar je v predpomnilniku, če zahteva HEAD označi, da je vir veljaven, sicer bo izvedel popolno zahtevo GET ali POST in osvežil svoj predpomnilnik s tem, kar je vrnjeno.

S pogojno zahtevo brskalnik pošlje polja v glavi, ki opisujejo svežino predpomnjenega vira. Tokrat strežnik ugotovi, ali je predpomnilnik brskalnika še svež.

Če je, strežnik vrne odgovor 304 s samo informacijami o glavi vira in brez telesa vira (podatki). Če se ugotovi, da je predpomnilnik brskalnika zastarel, bo strežnik vrnil polnih 200 odgovorov.

Ta mehanizem je hitrejši kot uporaba zahtev HEAD, saj odpravlja možnost, da bi morali namesto ene izdati dve zahtevi.

Zgornje poenostavlja postopek, ki je lahko precej zapleten. Pri predpomnjenju je veliko natančnega uravnavanja, vendar je vse nadzorovano s pomočjo poglavij, med katerimi je najpomembnejše upravljanje predpomnilnika.

Nadzor predpomnilnika

Ko se strežnik odzove na zahtevo, bo brskalniku poslal polja z glavo, ki kažejo, kakšno vedenje naj se prilagodi pri predpomnjenju. Če stran naložim na //en.wikipedia.org/wiki/Uniform_Resource_Identifier, odgovor vsebuje to v svojem zapisu glave:

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

zasebno pomeni, da mora samo brskalnik predpomniti vsebino dokumenta.

s-maxage in max-age sta nastavljena na 0 . Vrednost s-maxage je za proxy strežnike s predpomnilniki, medtem ko je max-age namenjen brskalniku. Učinek nastavitev max-starost sama je, da predpomnilniku vir preneha takoj, vendar pa se lahko še vedno uporabljajo (čeprav stale) v ponovno nalaganje strani, medtem ko v isti seji brskalnika.

Zastareli vir se lahko ponovno preveri z zahtevo HEAD, čemur lahko sledi zahteva GET ali POST, odvisno od odziva. Direktiva must-revalidate ukaže brskalniku, da ponovno potrdi predpomnjeni vir, če je zastarel.

Ker je v tem primeru največja starost nastavljena na 0 , se predpomnjeni vir takoj ustavi. Kombinacija obeh direktiv je enakovredna enotni direktivi no-cache .

Obe nastavitvi zagotavljata, da brskalnik vedno ponovno potrdi predpomnjeni vir, ne glede na to, ali je še vedno v isti seji ali ne.

Navodila za nadzor predpomnilnika so zelo obsežna in včasih zmedena - so samostojna tema. Celoten dokumentiran seznam direktiv najdete tukaj.

E-oznaka

To je žeton, ki ga strežnik pošlje in brskalnik obdrži do naslednje zahteve. To se uporablja le, če brskalnik ve, da je življenjska doba predpomnilnika vira potekla.

E-oznake so zgoščene vrednosti, ki jih ustvari strežnik in pogosto uporabljajo seme kot fizično ime datoteke in datum zadnje spremembe na strežniku. Ko se datoteka z viri posodobi, se spremenjeni datum spremeni in nova razpršena vrednost se ustvari in pošlje v glavo odziva na zahtevo.

Druge oznake glave, ki vplivajo na predpomnjenje

Oznake glave potečejo in zadnje spremenjene so skorajda zastarele, vendar jih večina strežnikov še vedno pošilja zaradi združljivosti s starejšimi brskalniki. Primer:

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

Tukaj se poteče na ničli datum (v preteklosti iz operacijskega sistema UNIX). To pomeni, da vir poteče takoj, tako kot max-age = 0 . Zadnja sprememba brskalniku sporoči, kdaj je bila vira izvedena zadnja posodobitev, ki jo lahko nato uporabi za odločitev, ali naj jo znova pridobi in ne uporabi vrednosti predpomnilnika.

Prisilna osvežitev predpomnilnika iz brskalnika

Kaj je težko ponovno naložiti?

Močno ponovno nalaganje prisili v ponovno nalaganje vseh virov na strani, ne glede na to, ali gre za vsebino, skripte, tabele slogi ali medije. Skoraj vse, kajne?

No, nekateri viri morda niso izrecno vključeni na stran. Namesto tega jih je mogoče pridobiti dinamično, običajno potem, ko se naloži vse izrecno.

Brskalnik vnaprej ne ve, da se bo to zgodilo, in ko bo, poznejše zahteve (ki jih običajno sprožijo skripti) še vedno uporabljajo predpomnjene kopije teh virov, če so na voljo.

Kaj je jasen predpomnilnik in trdo nalaganje?

S tem postopkom se izbriše celoten predpomnilnik brskalnika, kar ima enak učinek kot trdo ponovno nalaganje, vendar dodatno povzroči tudi pridobivanje dinamično naloženih virov - navsezadnje v predpomnilniku ni ničesar, zato ni izbire!

Omrežja za dostavo vsebine: predpomnilnik na zemljevidu

CDN je več kot le predpomnilnik, vendar je predpomnjenje eno od njegovih nalog. CDN podatke shranjuje na geografsko porazdeljenih lokacijah, tako da se čas povratnega potovanja do in iz geografsko lokalnega brskalnika skrajša.

Zahteve brskalnika se preusmerijo na bližnji CDN, s čimer se skrajšajo podatki o fizični razdalji, ki jih je treba prepotovati. CDN-ji lahko obvladujejo tudi velike količine prometa in zagotavljajo varnost pred nekaterimi vrstami napadov.

CDN svoje vire dobi prek Internet Exchange Point (IXP), vozlišč, ki so del hrbtenice interneta (z velikimi črkami). Obstajajo koraki za nastavitev usmerjanja zahtev za prehod na CDN namesto na gostiteljski strežnik. Naslednji korak je zagotoviti, da ima CDN trenutno vsebino vašega spletnega mesta.

V starih časih je večina CDN-jev podpirala potisno metodo: spletno mesto bi novo vsebino potiskalo v vozlišče CDN, ki bi se nato distribuiralo v geografsko razpršena vozlišča.

Dandanes večina CDN-jev uporablja zgoraj opisane protokole za predpomnjenje (ali podobne) za 1) prenos novih virov in 2) osvežitev obstoječih. Brskalnik ima še vedno svoj predpomnilnik in nič od tega se ne spremeni. Vse, kar CDN počne, je hitrejše prenašanje novih virov.