Web 快取與 HTTP 狀態碼

2021-10-09 20:20:59 字數 2695 閱讀 2038

瀏覽器快取

瀏覽器可以快取伺服器給它傳輸的資訊,那麼瀏覽器是怎麼判斷需不需要快取的呢?通過什麼來判斷?什麼情況下訪問**伺服器什麼情況下訪問源伺服器?

1、http 快取

這裡就涉及了http 快取機制,但 http 快取不僅涉及瀏覽器還應有**快取伺服器,http 快取體系大致可以分為快取儲存策略、快取過期策略、快取對比策略。

快取過期策略:用來確定本地儲存資料是否過期再決定是否要請求到伺服器端獲取資料

這個策略主要利用上面提到的 expires 的首部字段,expires 指明了快取資料的有效時間,告訴客戶端,到了這個時間點(對比客戶端時間點)後本地快取就作廢了,在這個時間點內,客戶端的快取還有效,可以利用來載入展示。

但是要注意一點,cache-control 中的 max-age 的設定會優先於 expires 的設定。

快取對比策略:將快取在客戶端的資料標識發往服務端,服務端通過標識判斷快取資料是否有效決定是否重發資料。

客戶端檢測到資料過期或是瀏覽器重新整理後往往會重發 http 請求到伺服器,伺服器這個時候並不是立馬返回資料,而是判斷請求頭部有沒帶有條件請求標識,這裡會結合 last-modified 與 etags 字段一起判斷有無效再做響應的決定。

條件請求欄位的判斷:last-modified 與 etag

與快取相關的首部條件請求字段

if-match

客戶端傳送請求時附帶條件,伺服器接收到後匹配相應的 etag 值,如果相符,則處理請求,反之返回狀態碼 412 precondition failed.

if-modified-since

客戶端向伺服器發出請求,告知伺服器如果 if-modified-since 字段值早於資源更新的時間,也就是資源已更新,則希望伺服器能處理這個請求,如果資源還沒有更新,則返回狀態碼 304 not modeified.

if-none-match

這個條件作用與 if-match 剛好相反,如果 etag 值不匹配才處理請求,符合則返回狀態碼 304 not modeified.

if-range

如果 etag 值相符則證明在伺服器中能到該請求檔案,表明就希望伺服器範圍處理請求,如果不符合則全部處理請求,返回整體檔案。

if-unmodified-since

這個條件作用與 if-modified-since 剛好相反,如果資源還沒更新則處理請求,否則返回狀態碼 412 precondition failed.

2、cookie

http cookie 最初是為了在客戶端儲存會話資訊,這個標準要求伺服器對任意的 http 請求傳送 set-cookie 的 http 頭作為相應地一部分,其中包括會話資訊,但 cookie 的記憶體比較小,最大為 4k ,所以一般儲存的資訊為 sessionid 等內容,客戶端發起 http 請求中帶有的 cookie 是唯一可以用於伺服器驗證客戶的**,或說是**辨別使用者進行 session 跟蹤而儲存在使用者本地的資料(通常有經過加密)。

構成

但注意的是:一定不要在 cookie 中存放重要和敏感的資料, cookie 資料並非儲存在乙個安全的環境裡面,其中包含的資料都可以被他人訪問,容易引起 web 安全的問題,所以不要在 cookie 中儲存注入信用卡號或者個人位址資料。

3、localstorage

localstorage 是 html5 中的一種本地快取方案,取代了 globalstorage,一般用來儲存 ajax 返回的資料,加快下次頁面開啟時的渲染速度。但是要注意的是,要訪問 localstorage 頁面必須來自同乙個網域名稱(子網域名稱無效),使用同一種協議,在同乙個埠上。另外,localstorage 儲存的最大容量為 5m, localstorage 屬性允許你訪問乙個 local storage 物件。localstorage 與 sessionstorage 相似。不同之處在於,儲存在 localstorage 裡面的資料沒有過期時間(expiration time),而儲存在 sessionstorage 裡面的資料會在瀏覽器會話(browsing session)結束時被清除,即瀏覽器關閉時。

4、sessionstorage

二、常見狀態碼:

我們沒必要所有狀態碼都記得一清二楚,主要把型別分清楚就 ok 了。

1xx:1xx 並不是經常用,但說到分類,還是可以說說,1xx 狀態碼的返回表示接收的請求正在處理。

2xx:2xx 代表請求成功,我們最常見的是:

3xx:表示重定向,這裡一般會伴隨響應首部的 location 字段一起返回,而且幾乎所有的瀏覽器在接收到含有首部 location 的響應後都會強制性地嘗試對已提示的重定向資源進行訪問,所以 3xx 為重定向狀態碼 ,常見的有:

4xx:客戶端錯誤,表示客戶端才是發生錯誤的原因所在。

5xx:伺服器錯誤,伺服器本身發生錯誤

HTTP 狀態碼 304 快取機制

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

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狀態碼 無響應體 瀏覽器就從本地讀取快取資料。但實際上,伺...