aDev.si

a dev is all you need

Zastopnik in predpomnjenje dokumentov

Zastopnik se ravna po naslednjem pristopu:

Če v predpomnilniku ni iskanega dokumenta, ga poišče na originalnem mestu, nato ga shrani v predpomnilniku in pošlje odjemalcu.

Rezultati izvršljivih programov in povpraševanj se ne shranjujejo v predpomnilniku.

Izdajatelji dokumentov lahko le-te opremijo z rokom veljavnosti (expiry date). Če predpomnilnik vsebuje dokument, katerega rok veljavnosti še ni potekel, zastopnik tak dokument enostavno pošlje odjemalcu. Izdajatelj dokumenta lahko dokumentu določi že pretečeni rok veljavnosti, tako da naslednjič ne bo dostopen v predpomnilniku, ampak ga bo treba znova poiskati na originalnem mestu.

Rok veljavnosti je bil že vnaprej predviden v protokolu HTTP, saj ta določa, da se v glavi sporočila nahaja informacija o veljavnosti dokumenta. Vendar je trenutno bolj malo strežnikov, ki dokumente opremljajo s tem podatkom. Dokler se to ne bo spremenilo, se je treba zanašati na druge, bolj hevristične pristope, ki dajo le grobo oceno veljavnosti dokumenta. Poleg tega je na WWW veliko “živih” dokumentov, za katere je v splošnem težko določiti rok veljavnosti. Nek dokument je lahko nespremenjen dokaj dolgo, potem pa se nenadoma spremeni. Te spremembe mogoče avtor ni predvidel in tako rok veljavnosti ni bil pravilno nastavljen.

Če je dokumentu pretekel rok veljavnosti, bi zastopnik moral vprašati oddaljenega strežnika, ali se je dokument spremenil. To omogoča posebna metoda, ki vrne le podatke o dokumentu ne pa dokumenta samega.

Vendar je v primeru spremembe originalnega dokumenta zelo neugodno po tej povezavi vzpostavljati še eno, ki bo tokrat omogočila prenos dokumenta. HTTP protokol zato omogoča zastopniku, da na originalno lokacijo pošlje pogojno zahtevo If-Modified-Since, ki je sicer enaka kot navadna zahteva po dokumentu, le da vsebuje tudi datum (oziroma čas) zadnje spremembe izvoda v predpomnilniku. Ta zahteva lahko v oddaljenem strežniku glede na primerjavo med poslanim in dejanskim časom zadnje spremembe dokumenta povzroči dva različna odziva:

Če se dokument ni spremenil, oddaljeni strežnik ne bo poslal celotnega dokumenta ampak le spremljajoče podatke kot npr. nov rok veljavnosti.

Če se je dokument spremenil, bo oddaljeni strežnik poslal novo verzijo dokumenta, ki bo v predpomnilniku nadomestila staro.

V obeh primerih odjemalec dobi veljaven dokument in predpomnilnik se lahko osveži.

Pogojna zahteva povzroči tudi več drugih koristi. Lahko jo uporablja program, ki mora redno osveževati večje število datotek. Zastopnik bi lahko redno osveževal svoj predpomnilnik med odjemalčevo neaktivnostjo in ne samo takrat, ko se pojavi zahteva po nekem dokumentu.

Uporaba pogojne zahteve je mogoča tudi pri starejših strežnikih. Protokol HTTP namreč določa, da se nepoznana polja v glavi sporočila enostavno ignorirajo. Če oddaljeni strežnik HTTP ne podpira pogojne zahteve, ne bo prišlo do napake, le strežnik bo poslal celoten dokument. Vendar trenutno vsi najpomembnejši strežniki HTTP že podpirajo pogojno zahtevo.

Za združljivost s starejšimi strežniki, ki ne določajo roka veljavnosti, zastopnik uporablja hevristična pravila. Prvo pravilo določa, da je dokument neveljaven, ko poteče čas, določen kot nek odstotek razlike med časom zadnje spremembe dokumenta in trenutkom njegovega prejema. Ta odstotek se pri strežniku W3C imenuje CacheLastModifiedFactor in se običajno giblje med 10% in 30%. Če je nastavljen na vrednost 0.1, to pomeni, da bo dokument, ki se je zadnjič spremenil pred dvajsetimi dnevi, dobil rok veljavnosti dva dni.

Drugo pravilo omejuje največji čas, ki lahko mine, preden zastopnik dokument znova preverja. Ta čas je pri strežniku W3C določen s konstanto CacheRefreshInterval, kar preprečuje, da bi se dokumenti, ki se le redko spreminjajo, zadrževali predolgo v predpomnilniku, ne da bi zastopnik preverjal njihovo veljavnost. Ti dve pravili je mogoče oblikovati tudi za posamezne tipe datotek, ker se npr. datoteke s slikami ali zvokom spreminjajo bolj poredko.

Leave a Comment

Vaš e-naslov ne bo objavljen. * označuje zahtevana polja