HTTP ETag
ETag ili oznaka entiteta, je deo HTTP protokola svetske mreže. To je jedan od nekoliko mehanizama koji HTTP pruža za validaciju veb keš-a, i koji omogućava klijentu da napravi uslovne zahteve. ETag može da se koristi za kontrolu optimistične konkurentnosti[1] , kao pomoć u sprečavanju istovremenog ažuriranja resursa da zamene jedni druge.
Etag je indetifikator dodeljen od strane veb servera na specifičnu verziju resursa pronađenu na URL-u. Ako resurs na tom URL-u sadrži neke promene, ETag je dodeljen. U ovom pogledu, ETagovi su po upotrebi slični otisima prstiju, jer se brzo mogu uporediti i time ustanoviti da li su dve reprezentacije resursa iste.
Generisanje ETagova
[уреди | уреди извор]Upotreba entitet-oznaka u HTTP zaglavlju je opciona, odnosno nije obavezna kao neka druga polja u HTTP 1.1 zaglavlju. Način na koji se generišu oznake entiteta nije precizno definisan HTTP specifikacijom.
Uobičajne metode za generisanje ETaga uključuju korišćenje heš funkcije otporne na kreiranje kolizije nad sadržajem resursa, heš vremenske oznake poslednje izmene, ili čak samo oznaku verzije.
Da bi se izbeglo korišćenje keš podataka, metode koje se koriste za generisanje ETagova treba da garantuju (koliko je to praktično) da je svaki Etag jedinstven. Ipak, funkcija za generisanje ETaga se može smatrati "korisnom" ukoliko se matematički može dokazati da će se duplikati menju ETagovima javljati "dovoljno retko", čak i ako je njihov nastanak moguć.
Poznato je da neke ranije funkcije za kreiranje kontrolne sume, kao što su CRC32 i CRC64, imaju problem sa kolizijom, pa stoga nisu dobri kandidati za generisanje ETagova.
Jaka i slaba validacija
[уреди | уреди извор]ETag mehanizam podržava i jaku i slabu validaciju. Razlikuju se po prisustvu početnog znaka W/ u ETag identifikatoru; na primer:
"123456789"—jaka ETag validacija W/"123456789"—slaba ETag validacija
ETag sa jakom validacijom označava da je sadržaj dva resursa u bajt identičan i da su sva druga polja (npr. Content-Language) ostala nepromenjena. Jaka validacija dozvoljava keširanje i sklapanje parcijalnih odgovora.
ETag sa slabom validacijom označava da su dva resursa semantički ekvivalentni, što znači da su za praktičnu svrhu zamenljivi i mogu da se koriste njihove keširane kopije. Resursi nisu nužno identični u bajt. Slabi ETagovi mogu biti korisni u slučajevima u kojima jaki veb serveri ne mogu praktično da ih generišu, kao što je slučaj sa dinamički generisanim sadržajem.
Tipična upotreba
[уреди | уреди извор]Ubično, kada je URL preuzet, server će vratiti resurs zajedno sa odgovarajućom vrednošću ETaga koja se nalazi u HTTP polju "ETag":
ETag: "686897696a7c876b7e"
Klijent tada može da odluči da kešira resurs zajedno sa ETagom. Kasnije, ako klijent želi da ponovo preuzme isti URL, poslaće prethodno sačuvanu kopiju ETaga uz zahtev u polju "If-None-Match".
If-None-Match: "686897696a7c876b7e"
Na ovaj naknadni zahtev, server sada može da uporedi ETag dobijen od strane klijenta sa ETagom trenutne verzije resursa. Ako se ETag vrednosti poklapaju, što znači da resurs nije promenjen, tada server može da pošalje nazad veoma kratak odgovor sa statusom HTTP 304 Not Modified. Status 304 govori klijentu da je njegova sačuvana verzija dobra i da treba da je koristi.
Međutim, ako se vrednosti ETaga ne poklapaju, što znači da je resurs verovatno promenjen, onda se vraća ceo odgovor, uključujuči i sadržaj resursa, baš kao da ETagovi nisu korišćeni. U ovom slučaju klijent može da odluči da zameni prethodno sačuvane verzije sa novim vraćenim resursom i novim ETagom.
ETag vrednosti mogu da se koriste u sistemu kontrolisanja veb stranica. Efikasno praćenje veb stranica je otežano činjenicom da većina veb sajtova nema postavljena ETag zaglavlja za veb stranice. Kada veb kontrolor nema nagoveštaja da li je veb sadržaj promenjen, ceo sadržaj mora biti vraćen i analiziran, korišćenjem prebrojavanja resursa i za izdavača i za pretplatnika.
Reference
[уреди | уреди извор]- ^ „Editing the Web - Detecting the Lost Update Problem Using Unreserved Checkout”. W3C Note. 10. 5. 1999.
Spoljašnje veze
[уреди | уреди извор]- Apache HTTP Server Documentation - FileETag Directive
- Editing the Web: Detecting the Lost Update Problem Using Unreserved Checkout, W3C Note, 10 May 1999.
- Old SQUID Development projects - ETag support Архивирано на сајту Wayback Machine (23. септембар 2012) (completed in 2001)
- Using ETags to Reduce Bandwidth & Workload with Spring & Hibernate