此篇抽自本人之前的文章:http面試題整理 。
別急著跳轉(zhuǎn),先把緩存知識學(xué)會了~
http中的緩存分為兩種:強緩存、協(xié)商緩存。
-
強緩存
響應(yīng)頭中的 status 是 200,相關(guān)字段有expires(http1.0),cache-control(http1.1)
,兩者同時出現(xiàn)時 cache-control 優(yōu)先級更高。主要是利用cache-control
的max-age
值來進(jìn)行判斷。瀏覽器再次請求服務(wù)器時,瀏覽器會先判斷max-age,如果到期則直接請求服務(wù)器,否則直接從緩存中讀取。
響應(yīng)頭的字段如圖所示:
-
協(xié)商緩存
響應(yīng)頭中的 status 是 304,相關(guān)字段有Etag / If-No-Match
,Last-Modified / If-Modified-Since
。
(1)服務(wù)器的 ETag 和 瀏覽器的 If-None-Match 對應(yīng)
:Etag(服務(wù)器): 上次加載時,服務(wù)器的 response header 返回的;
If-No-Match(瀏覽器): 瀏覽器請求時的 request header 里的,取的是 Etag 的值。如果服務(wù)器為請求的資源確定的
ETag
標(biāo)頭的值與瀏覽器請求中的If-None-Match
值相同,則服務(wù)器將返回304 Not Modified
。表示資源文件沒有發(fā)生改變,命中協(xié)商緩存。服務(wù)器優(yōu)先考慮Etag。
Etag 與 Last-Modifed 均是服務(wù)器的響應(yīng)頭返回的,如圖所示:
(2)
服務(wù)器的 Last-Modified 和 瀏覽器請求的 If-Modified-Since 對應(yīng)
:Last-Modified(服務(wù)器):該資源文件最后一次更改時間,服務(wù)器的 response header 里返回;
If-Modified-Since(瀏覽器):瀏覽器請求時的 request header 里的,取的是 Last-Modify 的值。
在下一次發(fā)送請求時,服務(wù)器在接收到會做比對,如果相同,則命中協(xié)商緩存。
If-No-Match 與 If-Modified-Since 是瀏覽器發(fā)送的,請求頭可以簡略為以下格式:文章來源:http://www.zghlxwxcb.cn/news/detail-840511.html
GET / HTTP/1.1
Host: example.com
Cache-Control: max-age=0
If-None-Match: "deadbeef" // 對應(yīng)服務(wù)端的標(biāo)記Etag
If-Modified-Since: Tue, 22 Feb 2022 20:20:20 GMT // 對應(yīng)服務(wù)端的Last-Modified
補充知識,常見的狀態(tài)碼:
以2開頭的代表的成功的返回,以3開頭代表重定向,以4開頭是客戶端、用戶操作的問題,以5開頭是服務(wù)器端的錯誤。文章來源地址http://www.zghlxwxcb.cn/news/detail-840511.html
狀態(tài)碼 | 含義 |
---|---|
200 | 請求成功。 |
301 | 永久重定向,請求的網(wǎng)頁已永久移動到新位置,瀏覽器會自動重定向到新的 url 地址。 |
302 | 臨時重定向,服務(wù)器目前從不同位置的網(wǎng)頁響應(yīng)請求,可使用原有 url 地址。 |
303 | 查看其它位置,重定向。 |
304 | Not Modified,資源未作修改。協(xié)商緩存。 |
305 | 所訪問資源必須通過代理訪問。 |
401 | 要求用戶要進(jìn)行身份驗證,未登錄等情形。 |
403 | 請求已發(fā)出,但服務(wù)端禁止訪問。 |
404 | 頁面無法找到。 |
500 | 服務(wù)器內(nèi)部錯誤。 |
501 | 服務(wù)器不支持請求的功能。 |
502 | 網(wǎng)關(guān)錯誤。 |
到了這里,關(guān)于http協(xié)議中的強緩存與協(xié)商緩存,帶圖詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!