詳解HTTP的快取機制與原理

2021-09-13 01:32:33 字數 2569 閱讀 9426

快取的重要性不言而喻,通過網路請求資源緩慢並且降低了客戶端的使用者體驗,增添了服務端的負擔。很多短期之內不會經常發生變化的資源檔案沒必要每次訪問都想服務端進行資料請求,而快取策略的使用就是為了改善客戶端的呈現時間,降低服務端的負擔。

對於http的快取機制來說,策略體現在http的頭部資訊的字段上,而這些策略根據是否需要重新向伺服器端發起請求可以分為強快取協商快取兩大類。

強快取緊密聯絡著乙個快取時間期限,當瀏覽器請求資源的時候會檢視快取中的資源是否存在並且確定該快取的資源是否過了「保質期」,若沒有超過保質期則將取得快取中的資源進行下一步處理

可見協商快取無論如何都會和伺服器互動,比較強快取稍微要複雜一點,但是二者是相輔相成並且可以共同存在的,強快取優先順序較高,意味著請求乙個資源時會先比較強快取的字段,如果命中則不會再執行接下來的協商快取的過程。

接下來就是要介紹,兩類快取相關http header相關欄位的控制實現了。

與強快取相關的http header 的字段有兩個expires以及cache-control

expires 字段規定了快取的資源的過期時間,在此時間之前,快取中的資源都是有效的,該字段的 value 是乙個格林威治時間格式(gmt)的時間,即世界標準時間,js 通過new date().toutcstring()可得到,形如tue, 27 feb 2018 06:37:48 gmt。他的缺點很明顯,時間期限是伺服器生成,存在著客戶端和伺服器的時間誤差,固定時間,http 1.0時的規範。相比較接下來介紹的cache-control優先順序較低。

該字段的值(預設為private):

其中最常用的值max-age單位為秒,對比expires體現著乙個相對時間,即多少秒後這個強快取機制下的快取資源失效。

publicprivate區別在於是否有中間商賺差價(是否允許cdn**伺服器快取)

no-cache和no-store兩個容易混淆,no-cache不是不快取的意思,

no-cache 可以在本地快取,可以在**伺服器快取,但是這個快取要伺服器驗證才可以使用 

no-store 徹底得禁用緩衝,本地和**伺服器都不緩衝,每次都從伺服器獲取

協商快取是通過客戶端和服務端進行http通訊時,所在響應頭和請求頭中互相表達「曖昧」的,相互通氣,互送快取標識。

第一次請求某乙個資源時,由於一定不會走快取,所以伺服器端會在資源的響應頭中加上乙個形如last-modified:mon, 26 feb 2018 06:37:41 gmt的字段告訴客戶端瀏覽器,這個資源上次最後修改的時間;重新整理頁面再次請求,這時候的協商快取會在請求頭中加上乙個形如if-modified-since:mon, 26 feb 2018 06:37:41 gmt,字面翻譯就是,是否在上個「曖昧」時間後修改了,值毫無疑問是服務端上一次響應給他的時間,讓伺服器去判斷是否在此時間之後資源內容發生了變化

整個過程也很簡單,最後的結果也很簡短。如果服務端發現改變了資源,就伴著200的 statuscode 和新鮮的資源給到客戶端,若是沒有修改,304 not modified讓客戶端從快取中取。

同樣,第一次客戶端請求乙個資源檔案時,服務端隨資源在響應頭部中甩來乙個字段 etag ,形如etag:w/"1823823287"該字段的值是該資源在伺服器端的唯一標識,生成的etag值的策略有服務端決定,總之是資源的乙個唯一的標識。資源發生變化則該值也發生變化。下一次客戶端請求同乙個資源的時候,在請求頭將這次得到的值放在請求頭中乙個叫 if-none-match 的字段中甩給服務端。

整個過程也很簡單,最後的結果也很簡短。如果服務端發現改變了資源,就伴著200的 statuscode 和新鮮的資源給到客戶端,若是沒有修改,304 not modified讓客戶端從快取中取。

上述兩個方式中,etag 和 if-none-match的優先順序要高於last-modified 和 if-modified-since,進而會衍生出乙個思考,二者相比功能相同,但是表達形式決定了 etag 解決了 last-modified 存在的一些問題,比如last-modified 是比較時間,精確到秒,若是毫秒級的改變則沒法兼顧,存在著週期性更改的資源,然而有可能資源本身的內容並沒有改變,那如果重新請求響應意義並不是那麼的大。所以不難理解etag具有高優先順序有他的合理之處。

HTTP快取機制與原理解析

http報文分為兩個部分 body 用來存放http傳輸的真正資料 http快取涉及到三個主主體 客戶端瀏覽器,快取資料庫和服務端。而http快取又分為兩種 其基本思想就是 當資料不存在於快取資料庫時,此時會直接去請求伺服器,並把得到的結果寫入快取資料庫中 若資料存在快取資料庫且未過時,則直接去快取...

HTTP快取機制及原理

前言 http 快取機制作為 web 效能優化的重要手段,對於從事 web 開發的同學們來說,應該是知識體系庫中的乙個基礎環節,同時對於有志成為前端架構師的同學來說是必備的知識技能。但是對於很多前端同學來說,僅僅只是知道瀏覽器會對請求的靜態檔案進行快取,但是為什麼被快取,快取是怎樣生效的,卻並不是很...

Http快取機制及原理

http 快取機制作為 web 效能優化的重要手段,但是對於很多前端同學來說,僅僅只是知道瀏覽器會對請求的靜態檔案進行快取,但是為什麼被快取,快取是怎樣生效的,卻並不是很清楚。http報文就是瀏覽器和伺服器間通訊時傳送及響應的資料塊。請求報文 request 和響應報文 response http請...