HTTP協議快取策略深入詳解之ETAG妙用

2022-09-07 02:42:09 字數 2381 閱讀 9077

etag是什麼:

etag 是url的entity tag,用於標示url物件是否改變,區分不同語言和session等等。具體內部含義是使伺服器控制的,就像cookie那樣。

http協議規格說明定義etag為「被請求變數的實體值」 。另一種說法是,etag是乙個可以與web資源關聯的記號(token)。典型的web資源可以乙個web頁,但也可能是json或xml文件。伺服器單獨負責判斷記號是什麼及其含義,並在http響應頭中將其傳送到客戶端。

例項詳解:

也許讀者們看完這個概念,還是搞不清楚這個etag響應頭訊息到底是幹什麼的,具體如何使用,所以接下來的篇幅我會用乙個實際的例子來詳細闡述etag的妙用。

想必許多網友都有訂閱某些大蝦的rss的習慣吧,但是大蝦也是人,也要吃飯睡覺打豆豆,所以不可能無時無刻的在從事文學創作,因此一般產量較高的大蝦也許平均每天能更新兩篇已經是不錯了,但是網友們卻總是不斷的去重新整理rss訂閱的內容,期望在下次重新整理中又有新的勁爆文章出現,如果我們每次重新整理,都要從伺服器端重新獲取內容(事實上,幾乎一天內95%以上的重新整理返回的都是相同內容,因為剛才也說了,大蝦一般一天也就出一兩篇新文章而已,所以大部分時間內,內容都是相同的),如果訂閱量相當巨大,這對於伺服器的壓力還是頻寬都是乙個嚴重的挑戰。其實真正需要伺服器重新返回內容是大蝦們更新了新的文章後,而其他時間我們無論怎麼重新整理伺服器最好能做到不需返回任何資料,這才是乙個比較好的方案,而我們的主角etag響應頭的出現正是為了解決這個問題。

瀏覽器端實現

當我們訂閱了某大蝦的rss,如圖,我們點選左下角「rss」按鈕:

然後我們進入了rss訂閱的相關頁面,此時我們開啟tamper data檢視下http請求和響應的一些內容(這裡我們截獲http請求和響應資訊的工具是基於ff瀏覽器的tamper data外掛程式,如果您對這個外掛程式不熟悉,請參考我的另外一篇介紹該工具的文章--  tamper data安裝與使用簡介

)。如下圖:

從上圖我們可以看到,伺服器端返回響應值為200,併發送回了相應的網頁內容,在http響應頭中有etag訊息頭,值為

etag="fca75d26f6dc8111a7d1b24e9debd652",我們不需要去關心這個響應頭的內容是什麼,我們只需要將這這個

頭資訊的值記錄下來,隨便建立乙個notepad之類的東西儲存好,以備接下來的實驗使用。

從此圖中我們可以看到if-none-match="fca75d26f6dc8111a7d1b24e9debd652",而該值的內容和我們先前第一次

重新整理返回的http響應中的etag響應頭的值完全一樣。

如果某大蝦並沒在這段時間內發表任何文章,於是webserver端的rss檔案沒有任何變化,於是if-none-match值和server端

的etag值相比較完全相等,這時候伺服器就會認為客戶端已經有最新的rss檔案內容的快取了,於是伺服器就會傳送乙個 響應碼

為「304」的http響應,304響應想必大家都知道是什麼意思了,沒錯,他不包含任何響應的內容,只是提示客戶端快取的內容是最新的,

如下圖

如果某大蝦剛發表了一篇新的文章,因此在webserver中的rss的內容發生了改變,因此他的etag值就會發生改變,於是伺服器會拿http請求中的if-none-match的

值和改變和的etag值做對比,顯然不正確的,於是webserver就會傳送乙個新的rss內容給客戶端,這裡我不能強制要求某大蝦來配合我們的實驗去立馬發表新文章,

所以我們就變相做,也就是我們故意修改http請求頭中的if-none-match的值,這樣就和伺服器端的etag就不會匹配了,顯然這時候伺服器就會受騙傳送乙份「新」的

rss內容回來,如下圖:

這裡我們將http請求中的if-none-match的值改為了"modifiedforourtest", 顯然與響應中的etag="fca75d26f6dc8111a7d1b24e9debd652"不同,因此伺服器就被受騙認為瀏覽器沒有最新的檔案內容,於是就返回了全新的響應內容(狀態碼200),而事實上瀏覽器端是有最新的內容的快取的。

結束語:

HTTP協議快取策略深入詳解之etag妙用

etag是什麼 etag 是url的entity tag,用於標示url物件是否改變,區分不同語言和session等等。具體內部含義是使伺服器控制的,就像cookie那樣。http協議規格說明定義etag為 被請求變數的實體值 另一種說法是,etag是乙個可以與web資源關聯的記號 token 典型...

http協議之快取

http協議快取控制 第一次請求時200 ok 第二次請求304 not modified 為修改狀態 解釋 在網路上有一些快取伺服器,另外瀏覽器自身也有快取功能。基於乙個前提 不會經常改動,伺服器在返回200的時候,還返回該的 簽名 etag 簽名可以理解為的 指紋 當瀏覽器再次訪問該時,去伺服器...

網路協議 HTTP協議詳解 CDN快取

cdn 概述 前面我們介紹了 http 快取的原理,以及基於瀏覽器快取和閘道器快取來實現 http 快取,瀏覽器快取由於其侷限性並不是主流的快取實現方案,而閘道器快取雖然解決了瀏覽器快取的問題,但是所有請求仍然要傳送到伺服器部署的資料中心,而我們的使用者是分散在天南海北的,距離資料中心越遠網路延遲越...