瀏覽器緩存

HTTP 1.0

在HTTP1.0中,可以在服務端設置 Expires 的HTTP頭來告訴客戶端在多久之后重新請求服務,可以通過 if-modified-since 的條件請求來使用緩存,其中發(fā)送時間是文件最初被下載的時間,而不是過期時間。如果文件沒有改變,服務器可以響應 304-Not Modified 表示文件未改變,客戶端可以繼續(xù)使用緩存的文件。

HTTP1.0中服務器在返回時,可以通過在響應頭中添加 Last-Modified 的方式表示資源上一次更改時間。請求時傳遞的if-modified-since值就是Last-Modified的值。但是這個時間僅僅只能代表編輯時間,如果文件內(nèi)容沒有變化,一樣會修改這個時間,所以再次請求還是會重新加載資源,而不會使用緩存。

HTTP 1.1

引入了文件標簽 e-tag ,e-tag 是文件或?qū)ο蟮奈ㄒ粯俗R,也就是一個MD5值,e-tag通過Response Heasers 返回。e-tag 在使用時會結(jié)合 If-None-Match 搭配使用,當緩存過期時,瀏覽器會在請求頭中設置 If-None-Match,值服務端返回的e-tag值(MD5),當文件未發(fā)生變化時,MD5值是不變的,此時服務端可以響應 304 狀態(tài)碼,瀏覽器繼續(xù)使用本地緩存,如果返回200,則服務器返回新的文件和新的 e-tag值。

HTTP1.1中還增加了新的緩存控制參數(shù),就是Cache-Control,在瀏覽器請求服務器資源時設置。如下就是Cache-Control的使用案例,表示這個Response緩存時間是0,也就是說每次請求都會重新獲取資源,不會使用緩存。

cache-control: max-age=0

Cache-Control 的優(yōu)先級高于 Expires ,當同時設置時,使用 Cache-Control 的設置來判斷。cache-control可以設置的參數(shù)有多個,而且請求頭和響應頭的可選參數(shù)是不一樣的。

請求頭中Cache-Control可選參數(shù)

字段名字 參數(shù) 說明
no-cache 告知(代理)服務器不使用緩存,強制向服務器發(fā)起請求
no-store 不緩存請求或相應的任何內(nèi)容
max-age=seconds 必須,單位:秒 告知服務器客戶端希望接收一個存在時間不大于(seconds)的資源
max-stale(=seconds) 可省略,單位:秒 告知服務器愿意接收一個超過緩存時間的資源,如果有指定seconds,則值為seconds,沒有指定則表示任意超出時間
min-refresh=seconds 必須,單位,秒 告知服務器希望接收一個在小于seconds秒內(nèi)被更新過的資源
no-transform 告知服務器客戶端希望獲取實體數(shù)據(jù)沒有被轉(zhuǎn)換的資源(比如不被壓縮)
only-if-cached 告知服務器客戶端希望獲取緩存的內(nèi)容,如果存在緩存,則不用向源服務器發(fā)去請求
cache-extension - 自定義擴展值,若服務器不識別該值將被忽略掉

響應頭中Cache-Control可選參數(shù)

字段名字 說明
public 表明任何情況下都得緩存該資源(即使是需要HTTP認證的資源)
private[="filed-name"] 可省略 表明趕回報文中全部或部分(若指定了filed-name則為filed-name的字段數(shù)據(jù))<br />僅開放給某些用戶(服務器指定的share-user,如代理服務器)做緩存使用,<br />其他用戶則不能緩存這些數(shù)據(jù)
no-cache 可省略 不直接使用緩存,要向服務器確認有效性
no-store 不緩存請求或響應的任何內(nèi)容
no-transform 代理不可更改媒體類型
must-revalidate 當前資源一定是向源服務器發(fā)起請求驗證有效性的,若請求失敗返回504
proxy-revalidate 要求代理緩存服務器對緩存有效性進行再次確認
max-age=seconds 必須,單位:秒 告知客戶端該資源的有效時間
s-maxage=seconds 必須,單位:秒 公共緩存服務器相應的最大age值
cache-extension - 自定義擴展值,如果瀏覽器不識別該值將被忽略

需要注意的是以上這些參數(shù)都是需要使用HTTP1.1及以上才有用的,其中no-store的優(yōu)先級最高。

常見的HTTP狀態(tài)碼

內(nèi)容源自菜鳥教程,個人整理所需,無意侵權(quán),源地址:
https://www.runoob.com/http/http-status-codes.html

狀態(tài)碼 英文名稱 描述
200 OK 請求成功。一般用于GET與POST請求
202 Accepted 已接受。已經(jīng)接受請求,但未處理完成
203 Non-Authoritative Information 非授權(quán)信息。請求成功。但返回的meta信息不在原始的服務器,而是一個副本
205 Reset Content 重置內(nèi)容。服務器處理成功,用戶終端(例如:瀏覽器)應重置文檔視圖??赏ㄟ^此返回碼清除瀏覽器的表單域
304 Not Modified 未修改。所請求的資源未修改,服務器返回此狀態(tài)碼時,不會返回任何資源。客戶端通常會緩存訪問過的資源,通過提供一個頭信息指出客戶端希望只返回在指定日期之后修改的資源
305 Use Proxy 用代理。所請求的資源必須通過代理訪問
400 Bad Request 客戶端請求的語法錯誤,服務器無法理解
401 Unauthorized 請求要求用戶的身份認證
403 Forbidden 服務器理解請求客戶端的請求,但是拒絕執(zhí)行此請求
404 Not Found 服務器無法根據(jù)客戶端的請求找到資源(網(wǎng)頁)。通過此代碼,網(wǎng)站設計人員可設置"您所請求的資源無法找到"的個性頁面
405 Method Not Allowed 客戶端請求中的方法被禁止
406 Not Acceptable 服務器無法根據(jù)客戶端請求的內(nèi)容特性完成請求
408 Request Time-out 服務器等待客戶端發(fā)送的請求時間過長,超時
500 Internal Server Error 服務器內(nèi)部錯誤,無法完成請求
502 Bad Gateway 作為網(wǎng)關(guān)或者代理工作的服務器嘗試執(zhí)行請求時,從遠程服務器接收到了一個無效的響應
503 Service Unavailable 由于超載或系統(tǒng)維護,服務器暫時的無法處理客戶端的請求。延時的長度可包含在服務器的Retry-After頭信息中
504 Gateway Time-out 充當網(wǎng)關(guān)或代理的服務器,未及時從遠端服務器獲取請求

參考內(nèi)容:

上野宣《圖解HTTP》

https://blog.csdn.net/u012375924/article/details/82806617
http://www.itdecent.cn/p/cd9f28d35727
https://www.runoob.com/http/http-status-codes.html

本文由博客一文多發(fā)平臺 OpenWrite 發(fā)布!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容