HTTP狀態碼304快取機制

2021-10-01 08:08:05 字數 1056 閱讀 9423

客戶端第一次請求服務端的某個位址時,服務端會在響應時攜帶 etag 與 last-modified 響應頭,客戶端下次再傳送同一位址的請求時,會攜帶 if-none-match 與 if-modified-since 請求頭,而if-none-match 就是 etag 的值if-modified-since 就是 last-modified 的值,這時服務端在接收請求後會獲取請求頭中的這兩個值,然後進行比對,若資源沒有更新,則響應 304 狀態碼,表示請求的資源沒有更新,客戶端可以從自己的快取裡獲取,若資源已更新,則響應 200 狀態碼,同第一次請求一樣,又會在響應時攜帶新的 etag 與 last-modified 響應頭,之後同上邏輯迴圈

etag 是屬於 http 1.1 屬性,它是由伺服器生成返回給前端,說白了,etag 一般為資源的雜湊值,即 etag 就是伺服器生成的乙個標記,用來標識資源是否有變化的,且etag 的優先順序高於 last-modified

last-modified 與 etag 類似。不過 last-modified 表示響應資源在伺服器最後修改時間而已。

與 etag 相比,不足為:

last-modified 標註的最後修改只能精確到秒級,如果某些檔案在 1 秒鐘以內,被修改多次的話,它將不能準確標註檔案的修改時間;

如果某些檔案會被定期生成,但有時內容並沒有任何變化,而 last-modified 卻改變了,導致檔案沒法使用快取;

有可能存在伺服器沒有準確獲取檔案修改時間,或者與**伺服器時間不一致等情形;

然而,etag 是伺服器自動生成或者由開發者生成的對應資源在伺服器端的唯一識別符號,能夠更加準確的控制快取。

http 快取機制主要在 http 響應頭中設定,響應頭中相關欄位為 expires、cache-control、last-modified、etag。

cache-control

HTTP 狀態碼 304 快取機制

客戶端第一次請求服務端的某個位址時,服務端會在響應時攜帶 etag 與 last modified 響應頭,客戶端下次再傳送同一位址的請求時,會攜帶 if none match 與 if modified since 請求頭,而if none match 就是 etag 的值,if modified...

http快取機制之304狀態碼

在網上看到一篇關於解釋瀏覽器快取更新機制304狀態碼的文章,裡面說如果請求頭中的if modified since欄位和if none match欄位的值分別和響應頭中的last modified欄位和etag字段值一致,伺服器就會返回304狀態碼 無響應體 瀏覽器就從本地讀取快取資料。但實際上,伺...

瀏覽器快取與HTTP 304狀態碼

為什麼網際網路公司專案中,靜態資源url後面會加上乙個時間戳。作用 控制快取。最終目的是為了控制專案上線的時候,靜態資源與老瀏覽器快取靜態資源避免衝突。解決辦法 加上時間戳 規範 t 專案上線時間 毫秒數 靜態資源快取 實際專案中在發布版本的時候,可能由於瀏覽器快取導致與伺服器端 發生衝突。這時候可...