ETag(Entity Tag)是HTTP協定中的一個重要組成部分,主要用於Web快取驗證。ETag的工作原理可以概括如下:
生成ETag:
伺服器在回響請求時,會為請求的資源生成一個ETag。這個ETag是一個不透明的標識符,用於唯一標識資源的特定版本。ETag的計算方式由伺服器決定,可以是基於檔案內容的哈希值或其他算法生成的。
快取ETag:
客戶端在接收到資源的同時,也會接收到該資源的ETag。客戶端將這個ETag和資源一起快取起來,以便於後續的請求中使用。
條件請求:
當客戶端再次請求相同的資源時,它會將之前收到的ETag通過If-None-Match請求頭髮送給伺服器。這個頭部的值就是之前伺服器返回的ETag。
伺服器驗證:
伺服器比較客戶端傳送的ETag和資源當前計算的ETag。如果兩者匹配,說明資源的內容自上次請求以來沒有發生變化,伺服器返回304狀態碼,表示資源未修改,客戶端可以繼續使用本地快取的版本。
如果ETags不匹配,伺服器知道資源已經更改,因此返回新的資源(狀態碼200)和新的ETag。
強校驗和弱校驗:
ETag支持強校驗和弱校驗。強ETag表示兩個資源表示的內容是逐位元組相同的,而弱ETag僅表明這兩種表示在語義上是等效的。強ETag允許快取和重組部分回響,而弱ETag主要用於性能最佳化,允許使用快取的副本。
通過這種方式,ETag幫助實現了HTTP快取的有效性驗證,減少了不必要的網路傳輸,從而節省頻寬並提高Web套用的性能。