国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

HTTP 緩存的相關(guān)協(xié)議

HelKyle / 1464人閱讀

摘要:上一篇文章梳理緩存的關(guān)鍵路徑。這條路徑的完成,依賴于協(xié)議。首次驗證相關(guān)協(xié)議服務(wù)器在響應(yīng)報文中設(shè)置或,緩存器對資源進(jìn)行緩存。再次請求同一資源時,緩存器通過檢查和,決定緩存是否過期的過程稱為首次驗證。因此,有雙向控制緩存的能力。

上一篇文章 梳理 HTTP 緩存的關(guān)鍵路徑。瀏覽器發(fā)起 HTTP 請求,請求報文發(fā)往瀏覽器內(nèi)置的緩存器,緩存器經(jīng)過首次驗證,再決定是否向服務(wù)器發(fā)起緩存的再次驗證。這條路徑的完成,依賴于 HTTP 協(xié)議。

1. 首次驗證相關(guān)協(xié)議

服務(wù)器在響應(yīng)報文中設(shè)置 Cache-Control 或 Expire,緩存器對資源進(jìn)行緩存。
再次請求同一資源時,緩存器通過檢查 Cache-Control:max-age 和 Expire,決定緩存是否過期的過程稱為首次驗證。

將 Cache-Control 的取值拆解為三部分,如下圖

三部分都是可選的。

第一部分決定是否有緩存,或者在哪里緩存,這條指令有4個取值:

public:可以緩存,且即可本地緩存,也可以共享緩存(例如CDN)

private:可以緩存,但只允許本地緩存

no-cache:告訴客戶端,不能直接使用緩存。需要經(jīng)過服務(wù)器再次驗證后,才決定是否使用緩存(服務(wù)器返回 304 才可用)

no-store:不允許緩存

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

max-age,例如 max-age=3000,即告訴客戶端和共享緩存可以緩存3000秒

s-maxage,例如 s-maxage=1000,即告訴共享緩存可以緩存1000秒

第三部分控制客戶端向服務(wù)器發(fā)起再次驗證,它有三個取值

must-revalidate 告訴客戶端必須向服務(wù)器發(fā)起再次驗證,即使本地緩存還沒過期(Cache-Control: max-age 或 Expire 還在有效期內(nèi))

proxy-revalidate 告訴共享緩存必須向源服務(wù)器發(fā)起再驗證,即使共享緩存還未過期

immutable 指明文檔是不可更改的

2. 以上都提到共享緩存,它是什么?

共享緩存相對于本地緩存,像瀏覽器內(nèi)置緩存這種只為當(dāng)前用戶提供緩存服務(wù)的稱為本地緩存,而像CDN這種為一個區(qū)域的用戶提供緩存服務(wù)的稱為共享緩存。所以 HTTP 緩存的關(guān)鍵路徑,在上 一篇文章 的甚礎(chǔ)上,加一個共享緩存。它不是必要的。

假設(shè)一個網(wǎng)站服務(wù)于全局的用戶 U,在服務(wù)器下流有N個共享緩存,服務(wù)于N個區(qū)域的用戶。補(bǔ)充進(jìn)來之后的路徑如下:

3. 舉些例子

服務(wù)器在響應(yīng)請求的時候,設(shè)置 Cache-Control ,不同取值含義分別是

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

Cache-Control: no-cache 表示可以緩存,但使用緩存前,必須通過 ETag 或 Last-Modified 向服務(wù)器發(fā)起再驗證,如果服務(wù)器響應(yīng) 304 則可用,否則不可。

Cache-Control: no-store 表示不可緩存資源。

Cache-Control: max-age=3600 s-maxage=7200 表示本地緩存有效期為 3600 秒,而共享緩存是 7200 秒。

4. 瀏覽器通過 Cache-Control 影響緩存行為

不僅服務(wù)器可以通過 Cache-Control 影響緩存器,瀏覽器也可以。它的取值有no-cache、no-store、max-age max-stale 等,具體的含義不在此處細(xì)說,可查《HTTP權(quán)威指南》。

因此,Cache-Control 有雙向控制緩存的能力。服務(wù)器通過響應(yīng)報文設(shè)置 Cache-Control
影響怎么設(shè)置緩存;而瀏覽器通過請求報文設(shè)置 Cache-Control 影響怎么使用緩存。Expire 只有在響應(yīng)報文中有效,其作用與
Cache-Control:max-age 一樣,不同的是 max-age 是相對值,Expire 是絕對值。max-age
告訴緩存可以緩存多久(例如 3600 秒), Expire 告訴緩存可以緩存到什么時候(例如 Sat, 29 Jul 2017
03:22:20 GMT )

5. 服務(wù)器再驗證

如果首次驗證發(fā)現(xiàn)緩存已經(jīng)超過有效期(Cache-Control:max-age 和 Expire 已經(jīng)過期),此時緩存有可能依然存在,但不能直接使用。需要向服務(wù)器發(fā)請驗證,由服務(wù)器決定是否可用,這個過程稱為服務(wù)器再驗證。

舉例說明:

首次請求文件,服務(wù)器在響應(yīng)報文中設(shè)置如下緩存信息,緩存器收到報文,根據(jù) 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

一天后,再次請求該文件,此時如果用戶并非清除緩存,并且緩存還未被緩存器清除。緩存器將會檢測到該請求存在緩存,但此時緩存已經(jīng)超過有效期,于是在請求報文里設(shè)置 If-None-Match 和 If-Modified-Since,取值分別為該文件的 ETag 和 Last-Modified。

服務(wù)器收到報文,檢測文件的上次修改時間是否與報文中的 If-Modified-Since 一樣,同時檢測資源的 ETag 是否與報文中的 If-None-Match 一樣。如果都一樣,認(rèn)為緩存器的緩存仍然可以繼續(xù)使用,響應(yīng) 304 的狀態(tài)碼,緩存器收到響應(yīng)后,將本地的緩存文件響應(yīng)給瀏覽器。

請求報文如下

If-None-Match:"597839c9-16c3"
if-Modified-Since: Wed, 26 Jul 2017 06:42:17 GMT

流程圖如下

相關(guān)文章
HTTP 緩存的關(guān)鍵路徑

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/61879.html

相關(guān)文章

  • 淺談http協(xié)議(一):與緩存相關(guān)頭信息Etag、Last-Modified、Cache-Cont

    摘要:協(xié)商緩存用戶發(fā)送的請求,發(fā)送到服務(wù)器后,由服務(wù)器判定是否從緩存中獲取資源。如果想主動清除緩存,也可以在請求頭信息中加入來禁止緩存。主要取值如下緩存的時效由決定。是的字段,而是的字段,當(dāng)與同時存在時,的優(yōu)先級要高于。 在講這幾個屬性之前,先復(fù)習(xí)下瀏覽器的緩存機(jī)制,再結(jié)合了解一下Last-Modified / If-Modified-Since、Etag / If-Match、cache-...

    FuisonDesign 評論0 收藏0
  • 淺談http協(xié)議(一):與緩存相關(guān)頭信息Etag、Last-Modified、Cache-Cont

    摘要:協(xié)商緩存用戶發(fā)送的請求,發(fā)送到服務(wù)器后,由服務(wù)器判定是否從緩存中獲取資源。如果想主動清除緩存,也可以在請求頭信息中加入來禁止緩存。主要取值如下緩存的時效由決定。是的字段,而是的字段,當(dāng)與同時存在時,的優(yōu)先級要高于。 在講這幾個屬性之前,先復(fù)習(xí)下瀏覽器的緩存機(jī)制,再結(jié)合了解一下Last-Modified / If-Modified-Since、Etag / If-Match、cache-...

    Arno 評論0 收藏0
  • 圖解 HTTP 緩存機(jī)制 | 實用 HTTP

    摘要:緩存緩存主要是通過請求和響應(yīng)報文頭中的對應(yīng)信息,來控制緩存的策略。就會返回一個的狀態(tài)碼,表示可以繼續(xù)使用客戶端本地緩存的數(shù)據(jù),并刷新超時時間。與之相對的,則表示當(dāng)前響應(yīng)是針對單個用戶的,并非通用數(shù)據(jù),因此不建議任何中間緩存對其進(jìn)行緩存。 showImg(https://segmentfault.com/img/remote/1460000015383634?w=1080&h=720);...

    zhouzhou 評論0 收藏0

發(fā)表評論

0條評論

HelKyle

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<