HTTP快取的工作原理和實現機制

2022-06-30 17:30:13 字數 1822 閱讀 1655

流程如下圖所示:

基於http協議的http快取是通過在請求頭和響應頭中設定相應的字段值來實現的。

expires欄位的值為伺服器返回的快取資源的到期時間(絕對時間),即下一次請求時間小於服務端返回的到期時間,直接使用快取資料。

expires是http/1.0的東西,現在瀏覽器預設使用http/1.1,所以基本忽略。

cache-control字段可以設定多個屬性值,常見屬性及含義如下所示

no-cache:強制確認快取,每次請求發出時,快取會將此請求傳送到伺服器,伺服器會驗證請求中所描述的快取是否過期,若未過期,則快取才使用本地快取副本。

public:用於共享快取,任何中間**都可以快取響應

private:用於私有快取,只有客戶端瀏覽器才可以快取響應,沒有指定public時,預設為private

max-age:用於設定快取有效期,max-age是距離請求發起時間的秒數,是乙個相對值,如果響應頭中存在expiresmax-agemax-age為準。

must-revalidate使用該指令時,意味著快取在考慮使用乙個陳舊的資源時,必須先驗證他的狀態,已過期的快取將不被使用,該屬性與no-cache的區別在於,使用no-cache時,不管本地資源快取副本是否過期,使用資源快取副本前一定要到源伺服器進行副本有效性校驗,而must-revalidate則不然,只有在本地資源快取副本過期後,才去源伺服器進行有效性檢測。

last-modified字段常用於響應頭中,告知客戶端資源的最後修改時間,這樣當客戶端再次請求該資源時,會在if-modified-since請求欄位中帶上上次請求返回的最後修改時間,伺服器收到請求報文後發現請求頭包含if-modified-since字段,則與請求資源的最後修改時間對比。如果資源的最後修改時間大於if-modified-since字段值,說明資源又被修改過,則返回完整的資源內容,對應響應狀態碼為200;如果資源的最後修改時間小於或等於if-modified-since字段值,說明資源沒有做新的修改,則返回狀態碼304,告知瀏覽器使用本地儲存的快取作為響應實體。

etag用於響應頭中,告知客戶端資源在伺服器的唯一標識(生成規則有伺服器指定,每當資源發生修改後etag值會變化),當客戶端再次請求資源時,通過if-none-match字段通知伺服器客戶端快取資源的唯一標識。伺服器收到請求報文發現請求頭中包含if-none-match字段,則與被請求資源的唯一標識作對比,如果不同則說明資源被改動過,則返回資源的完成內容,狀態碼為200;如果相同說明資源沒有修改,返回狀態碼304,告知瀏覽器使用本地儲存的快取作為響應實體。

etag/if-none-match的優先順序要高於last-modified/if-modified-since,如果同時出現,以前者為準。

HTTP快取機制和原理

作為web開發,http 快取機制作為 web 效能優化的重要手段。這篇博文主要是,關於瀏覽器會對請求的靜態檔案進行快取,但是為什麼被快取,快取是怎樣生效的。http報文就是瀏覽器和伺服器間通訊時傳送及響應的資料塊。瀏覽器向伺服器請求資料,傳送請求 request 報文 伺服器向瀏覽器返回資料,返回...

HTTP的原理和工作機制

1.http是什麼?直觀的 1.瀏覽器位址列輸入位址,開啟網頁。2.android中傳送網路請求,返回對應內容。理論上 hypertext transfer protocol 超文字傳輸協議。超文字 在電腦中顯示的 含有可以指向其他文字的鏈結的文字。2.http的工作方式。瀏覽器通過http向伺服器...

HTTP的工作原理

在該系統的編碼完成後,首先想到的就是發布了這在之前的部落格 win8 下iis 的安裝和 的發布 中已經提到過 其次想到的就是如何訪問 通過瀏覽器訪問全球資訊網伺服器 它,這就是今天部落格將要寫到的內容。一 什麼是http協議 正如水面航行我們用的是船,鐵路跑運輸的是列車,我們看不到列車在水中游同時...