Loading AI tools
来自维基百科,自由的百科全书
ETag或實體標籤(entity tag)是全球資訊網協議HTTP的一部分。
ETag是HTTP協議提供的若干機制中的一種Web緩存驗證機制,並且允許客戶端進行緩存協商。這就使得緩存變得更加高效,而且節省帶寬。如果資源的內容沒有發生改變,Web伺服器就不需要發送一個完整的響應。ETag也可用於樂觀並發控制[1],作為一種防止資源同步更新而相互覆蓋的方法。
ETag是一個不透明的標識符,由Web伺服器根據URL上的資源的特定版本而指定。如果那個URL上的資源內容改變,一個新的不一樣的ETag就會被分配。用這種方法使用ETag即類似於指紋,並且他們能夠被快速地被比較,以確定兩個版本的資源是否相同。ETag的比較只對同一個URL有意義——不同URL上的資源的ETag值可能相同也可能不同,從他們的ETag的比較中無從推斷。
ETag在HTTP頭欄位中的使用是可選的(不像HTTP/1.1的其他頭欄位是強制性的)。HTTP規範從未指定生成ETag的方法。
生成ETag常用的方法包括對資源內容使用抗碰撞散列函數,使用最近修改的時間戳的哈希值,甚至只是一個版本號。
為了避免使用過時的緩存數據,用於生成ETag的方法應保證(同時儘可能的實用)每一個ETag都是唯一的。然而,只要ETag的生成函數可以用數學證明,即使生成的ETag可能重複,其概率也是可接受範圍內的無窮小,那麼就可以判斷這個函數是可用的。
ETag機制同時支持強校驗和弱校驗。它們通過ETag標識符的開頭是否存在「W/」來區分,如:
"123456789" -- 一个强ETag验证符 W/"123456789" -- 一个弱ETag验证符
強校驗的ETag匹配要求兩個資源內容的每個字節需完全相同,包括所有其他實體欄位(如Content-Language
)不發生變化。強ETag允許重新裝配和緩存部分響應,以及字節範圍請求。弱校驗的ETag匹配要求兩個資源在語義上相等,這意味著在實際情況下它們可以互換,而且緩存副本也可以使用。不過這些資源不需要每個字節相同,因此弱ETag不適合字節範圍請求。當Web伺服器無法生成強ETag的時候,比如動態生成的內容,弱ETag就可能發揮作用了。
在典型用法中,當一個URL被請求,Web伺服器會返回資源和其相應的ETag值,它會被放置在HTTP的「ETag」欄位中:
ETag: "686897696a7c876b7e"
然後,客戶端可以決定是否緩存這個資源和它的ETag。以後,如果客戶端想再次請求相同的URL,將會發送一個包含已保存的ETag和「If-None-Match」欄位的請求。
If-None-Match: "686897696a7c876b7e"
客戶端請求之後,伺服器可能會比較客戶端的ETag和當前版本資源的ETag。如果ETag值匹配,這就意味著資源沒有改變,伺服器便會發送回一個極短的響應,包含HTTP 「304 未修改」的狀態。304狀態告訴客戶端,它的緩存版本是最新的,並應該使用它。
然而,如果ETag的值不匹配,這就意味著資源很可能發生了變化,那麼,一個完整的響應就會被返回,包括資源的內容,就好像ETag沒有被使用。這種情況下,客戶端可以用新返回的資源和新的ETag替代先前的緩存版本。
ETag值可用於網頁監視系統。大多數站點沒有為網頁設置ETag頭信息,這一事實阻礙了高效的網頁監測。當Web監視器不知道網站內容是否發生變化的時候,它不得不被檢索和分析所有的內容,這不僅占用發布者的計算資源,還有訂閱者的。
由於HTTP cookie被越來越多的注重隱私保護的用戶刪除,可以將ETag用來追蹤唯一用戶[2]。2011年7月,Ashkan Soltani和加州大學伯克利分校的一組研究者,包括Hulu.com將ETag用於追蹤用途。[3]Hulu和KISSmetrics在2011年7月29日停止了這樣的追蹤,[4]而KISSmetrics和超過20位其用戶面臨關於「無法刪除」的cookie的集體訴訟,其中包括了ETag的使用。[5]
因為ETag由瀏覽器保存,並且在訪問統一資源時隨之後請求返回,一個追蹤伺服器可以輕鬆地重複設定任何從瀏覽器收到的ETag,以保持ETag不變,類似於持久cookie。額外的緩存頭部也能增強ETag的持久性。[6]
根據實現,ETag可以通過清除瀏覽器緩存清除。
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.