imweb前端部落格——http快取控制小結
it筆錄——http訊息頭
關鍵頭部字段pragma
http1.0可用,現在為了向下相容,也設定該頭部,只有乙個值:no-cache禁用快取
expires
設定快取時間(該時間相對於伺服器),接受乙個gmt(格林尼治時間),用來告訴瀏覽器過期時間,如果還沒有過這個時間則不傳送請求。
expires: sun jul 15 2018 19:13:07 gmt
cache-control
也可用來設定快取時間,http1.1與http1.0可用,三者優先順序:
pragma > cache-control > expires
可設定多個值,比如常用的:no-cache, max-age, public, private
last-modified
接受乙個格林尼治時間,說明資源的最近一次的修改時間,該字段的作用是當某個資源儲存的快取時間過期了,但伺服器並沒有更新過這個資源,那麼可以告訴客戶端此資源沒有更新,可以獲取快取中的內容(返回304,不返回實體內容)
if-modified-since
last-modified的值會在下一次的請求中通過if-modified-since傳遞給伺服器,如果它的值和此時伺服器的last-modified值一致,說明沒有修改,伺服器返回304。如果不一致則當作正常請求處理,返回資源和200狀態碼。
etag
服務端資源有可能被更新了,但是實際內容並沒有改變。但是這樣依然會引起last-modified的更新,伺服器給客戶端返回沒有任何改變的內容。為了解決這個問題,引入了etag。用於http1.1。
伺服器為資源生成乙個唯一的字串,如通過md5編碼。只要不變,生成的字串就不變。在客戶端請求資源的時候,將該etag一起返回給客戶端,客戶端保留該etag,下次請求的時候帶上。然後比較etag,相同則表示內容相同,返回304;不同,返回資源和200狀態碼。
if-none-match
etag的值會通過if-none-match頭部傳遞給伺服器,然後伺服器比較etag的值,相同則表示內容相同,返回304;不同,返回資源和200狀態碼。
另外的 if-none-match,if-unmodified-since
他們不是用來實現快取策略的,而是用來優化併發控制,他們的作用是,使得當前請求成為條件式請求:只有當資源在指定的時間之後沒有進行過修改的情況下,伺服器才會返回請求的資源,或是接受 post 或其他 non-safe 方法的請求。例如在某些場景:假如在原始副本獲取之後,伺服器上所儲存的文件已經被修改,那麼對其作出的編輯會被拒絕提交。
expires / cache-control用來設定快取時間,即資源有效時間。狀態碼 200(from cache),可避免請求傳送到伺服器。
last-modified / etag用來判斷資源是否被修改了。狀態碼 304(not change),可避免傳輸相同的資源內容,造成頻寬和時間的浪費。
Http快取機制
快取快取,就是把需要的東西存起來,不需要每次都去請求。主要目的減小伺服器壓力,放到客戶端上來講,還利於節省流量,還能流暢的把ui顯示出來,提高了使用者體驗。對於http快取來講,主要的就是校驗快取的有效性,也就是新鮮度。如果客戶端不能及時響應服務端的資料變化,快取一直不能被更新,那不就是得不償失了?...
HTTP 快取機制
基於 header的示例 content length 3534http快取策略分為 1 快取策略 cache control 頭里的 public private no cache max age no store 其中no store為不儲存,no cache 0秒的max age 2 快取過期...
http快取機制
首先需要了解http協議的響應頭中的幾個欄位的含義 cache control expires 該欄位表示資源的過期時間。etag 該欄位表示資源的唯一標識。last modified 該欄位表示資源的最後修改時間。有以下2個問題需要注意 為什麼優先校驗etag,後校驗last modified?因...