HTTP 快取的相關協議

2021-09-16 13:16:09 字數 2253 閱讀 4182

伺服器在響應報文中設定 cache-control 或 expire,快取器對資源進行快取。

再次請求同一資源時,快取器通過檢查 cache-control:max-age 和 expire,決定快取是否過期的過程稱為首次驗證。

將 cache-control 的取值拆解為三部分,如下圖

三部分都是可選的。

第一部分決定是否有快取,或者在**快取,這條指令有4個取值:

第二部分決定快取的有效時間,以秒為單位,有兩種取值

第三部分控制客戶端向伺服器發起再次驗證,它有三個取值

共享快取相對於本地快取,像瀏覽器內建快取這種只為當前使用者提供快取服務的稱為本地快取,而像cdn這種為乙個區域的使用者提供快取服務的稱為共享快取。所以 http 快取的關鍵路徑,在上 一篇文章 的甚礎上,加乙個共享快取。它不是必要的。

伺服器在響應請求的時候,設定 cache-control ,不同取值含義分別是

cache-control: public max-age=3600 表示本地快取和共享快取的有效時間為3600秒。此處如果沒有 public 效果一樣,即在沒有指明是 private 的情況下,都是 public

cache-control: no-cache 表示可以快取,但使用快取前,必須通過 etag 或 last-modified 向伺服器發起再驗證,如果伺服器響應 304 則可用,否則不可。

cache-control: no-store 表示不可快取資源。

cache-control: max-age=3600 s-maxage=7200 表示本地快取有效期為 3600 秒,而共享快取是 7200 秒。

不僅伺服器可以通過 cache-control 影響快取器,瀏覽器也可以。它的取值有no-cache、no-store、max-age max-stale 等,具體的含義不在此處細說,可查《http權威指南》。

因此,cache-control 有雙向控制快取的能力。伺服器通過響應報文設定 cache-control

影響怎麼設定快取;而瀏覽器通過請求報文設定 cache-control 影響怎麼使用快取。expire 只有在響應報文中有效,其作用與

cache-control:max-age 一樣,不同的是 max-age 是相對值,expire 是絕對值。max-age

告訴快取可以快取多久(例如 3600 秒), expire 告訴快取可以快取到什麼時候(例如 sat, 29 jul 2017

03:22:20 gmt )

如果首次驗證發現快取已經超過有效期(cache-control:max-age 和 expire 已經過期),此時快取有可能依然存在,但不能直接使用。需要向伺服器髮請驗證,由伺服器決定是否可用,這個過程稱為伺服器再驗證。

舉例說明:

首次請求檔案,伺服器在響應報文中設定如下快取資訊,快取器收到報文,根據 cache-control 和 expire 快取檔案,記錄有效期為1天。同時記錄下該檔案的 etag 和 last-modified。

cache-control:max-age=86400

etag:"597839c9-16c3"

expires:sat, 29 jul 2017 03:22:20 gmt

last-modified:wed, 26 jul 2017 06:42:17 gmt

一天後,再次請求該檔案,此時如果使用者並非清除快取,並且快取還未被快取器清除。快取器將會檢測到該請求存在快取,但此時快取已經超過有效期,於是在請求報文裡設定 if-none-match 和 if-modified-since,取值分別為該檔案的 etag 和 last-modified。

伺服器收到報文,檢測檔案的上次修改時間是否與報文中的 if-modified-since 一樣,同時檢測資源的 etag 是否與報文中的 if-none-match 一樣。如果都一樣,認為快取器的快取仍然可以繼續使用,響應 304 的狀態碼,快取器收到響應後,將本地的快取檔案響應給瀏覽器。

請求報文如下

if-none-match:"597839c9-16c3"

if-modified-since: wed, 26 jul 2017 06:42:17 gmt

流程圖如下

網路相關協議要點

tcp協議是面向連線,可靠的傳輸層協議,是基於全雙工通訊,並且是基於位元組流的。1 保證傳輸資料可靠性機制 a 定時器 當tcp發出乙個報文段,會啟動乙個定時器,等待目的端確認收到報文段,若一段時間之後,沒有收到確認資訊,就會重傳報文段。b 確認 當tcp收到發自tcp連線另一端的資料,將會傳送乙個...

KDC以及相關協議

kdc 被提出是為了解決對稱金鑰加密通訊在實際使用時存在的一些問題。為此,我們先了解一下私鑰加密通訊的一些窘境 私鑰加密用來保證在不安全通道上進行通訊時,通訊雙方資訊的保密性和完整性。然而其前提是雙方擁有共享的金鑰。那麼問題來了,通訊的雙方如何安全地共享此金鑰呢?顯然私鑰的共享不能在公共的通道上進行...

USB硬體相關 協議

關於usb驅動協議那邊的事情 有的時候會感覺很奇怪,乙個usb咋麼就那麼牛逼,小可以給裝置充電,大還能傳播資料還那麼的多,而且巴拉巴拉 而且仔細觀察usb 也就只有4根pin腳,為什麼連線電腦居然可以出好多個埠?而且都可以往這些埠寫東西?這不科學啊 帶著這些疑問,我好好科普了一下自以為很了解的通訊知...