你知道HTTP協議的ETag是幹什麼的嗎?

2022-09-16 22:00:24 字數 1009 閱讀 9197

在http1.1規範中,新增了乙個http頭資訊:etag。對於普通開發者來說,可能平時真的不會接觸到該http頭。平時接觸不到或者說用得少,不代表這個請求頭不重要。etag使用得當,是可以減少伺服器頻寬壓力的。

etag是 entity tag的縮寫,可以理解為「被請求變數的實體值」,etag是服務端的乙個資源的標識,在 http 響應頭中將其傳送到客戶端。所謂的服務端資源可以是乙個web頁面,也可以是json或xml等。伺服器單獨負責判斷記號是什麼及其含義,並在http響應頭中將其傳送到客戶端。比如,瀏覽器第一次請求乙個資源的時候,服務端給予返回,並且返回了etag: "50b1c1d4f775c61:df3" 這樣的字樣給瀏覽器,當瀏覽器再次請求這個資源的時候,瀏覽器會將if-none-match: w/"50b1c1d4f775c61:df3" 傳輸給服務端,服務端拿到該etag,對比資源是否發生變化,如果資源未發生改變,則返回304http狀態碼,不返回具體的資源。

我們可以通過etag來利用瀏覽器的快取,降低我們伺服器的頻寬壓力。這是可以提公升服務端的效能的(資料傳輸上)。七牛雲的檔案儲存,就用到了etag的屬性。現在,我請求七牛雲上的乙個資源:

可以通過它的響應頭看到,返回了etag欄位給我們。etag的值為fpl1rxe-k20cyslu89ytzuq3yddk。

再次重新整理資源:

此時,http的狀態碼變成了304,304狀態碼表示資源未改變。檢視此次的http請求頭,如下:

可以看到,客戶端在向服務端請求資源的時候,通過if-none-match請求頭帶上了之前服務端返回的etag的值。服務端收到第二次請求的時候,發現攜帶了if-none-match欄位,就重新計算伺服器對應資源的etag,如果二者匹配了,就認為資源沒有發生變化,直接給客戶端相應304,讓客戶端讀取快取中的資料。

本文只是對etag做乙個概念性的講解,並且結合了七牛雲的物件儲存的例子,分析了etag快取的流程。關於etag,還有很多東西沒有深入講解,比如etag是怎麼計算的,last-modified/if-modified-since是什麼,以及etag實戰等,這些在後續再做深入的講解吧!

你知道HTTP協議的ETag是幹什麼的嗎?

在http1.1規範中,新增了乙個http頭資訊 etag。對於普通開發者來說,可能平時真的不會接觸到該http頭。平時接觸不到或者說用得少,不代表這個請求頭不重要。etag使用得當,是可以減少伺服器頻寬壓力的。etag是 entity tag的縮寫,可以理解為 被請求變數的實體值 etag是服務端...

你應該知道的HTTP頭 ETag

在http1.1規範中,新增了乙個http頭資訊 etag。對web開發者來說,它是乙個非常重要的資訊。它是用作快取使 用的兩個主要的 頭資訊之一 另乙個是expires 除此之外,在rest架構中,它還可以用於控制併發操作 上節中已經大 致介紹atompub中控 制併發的流 程 那麼etag是什麼...

HTTP協議ETag窺探

我們都知道,http 1.1中有乙個etag,用來判斷請求的檔案是否被修改。為什麼要使用etag呢?etag主要為了解決last modified無法解決的一些問題 1 一些檔案也許會週期性的更改,但是他的內容並不改變 僅僅改變的修改時間 這個時候我們並不希望客戶端認為這個檔案被修改了,而重新get...