HTTP 1.0
在HTTP1.0中膀哲,可以在服務(wù)端設(shè)置 Expires
的HTTP頭來告訴客戶端在多久之后重新請(qǐng)求服務(wù)造壮,可以通過 if-modified-since
的條件請(qǐng)求來使用緩存竞惋,其中發(fā)送時(shí)間是文件最初被下載的時(shí)間嗓蘑,而不是過期時(shí)間源祈。如果文件沒有改變榆苞,服務(wù)器可以響應(yīng) 304-Not Modified
表示文件未改變,客戶端可以繼續(xù)使用緩存的文件喉刘。
HTTP1.0中服務(wù)器在返回時(shí)瞧柔,可以通過在響應(yīng)頭中添加 Last-Modified
的方式表示資源上一次更改時(shí)間漆弄。請(qǐng)求時(shí)傳遞的if-modified-since
值就是Last-Modified
的值睦裳。但是這個(gè)時(shí)間僅僅只能代表編輯時(shí)間,如果文件內(nèi)容沒有變化撼唾,一樣會(huì)修改這個(gè)時(shí)間廉邑,所以再次請(qǐng)求還是會(huì)重新加載資源,而不會(huì)使用緩存倒谷。
HTTP 1.1
引入了文件標(biāo)簽 e-tag
蛛蒙,e-tag 是文件或?qū)ο蟮奈ㄒ粯?biāo)識(shí),也就是一個(gè)MD5值渤愁,e-tag
通過Response Heasers 返回牵祟。e-tag
在使用時(shí)會(huì)結(jié)合 If-None-Match
搭配使用,當(dāng)緩存過期時(shí)抖格,瀏覽器會(huì)在請(qǐng)求頭中設(shè)置 If-None-Match
,值服務(wù)端返回的e-tag值(MD5),當(dāng)文件未發(fā)生變化時(shí)诺苹,MD5值是不變的咕晋,此時(shí)服務(wù)端可以響應(yīng) 304 狀態(tài)碼,瀏覽器繼續(xù)使用本地緩存收奔,如果返回200掌呜,則服務(wù)器返回新的文件和新的 e-tag
值。
HTTP1.1中還增加了新的緩存控制參數(shù)坪哄,就是Cache-Control
,在瀏覽器請(qǐng)求服務(wù)器資源時(shí)設(shè)置质蕉。如下就是Cache-Control
的使用案例,表示這個(gè)Response緩存時(shí)間是0翩肌,也就是說每次請(qǐng)求都會(huì)重新獲取資源模暗,不會(huì)使用緩存。
cache-control: max-age=0
Cache-Control 的優(yōu)先級(jí)高于 Expires ,當(dāng)同時(shí)設(shè)置時(shí)念祭,使用 Cache-Control 的設(shè)置來判斷汰蓉。cache-control可以設(shè)置的參數(shù)有多個(gè),而且請(qǐng)求頭和響應(yīng)頭的可選參數(shù)是不一樣的棒卷。
請(qǐng)求頭中Cache-Control可選參數(shù)
字段名字 | 參數(shù) | 說明 |
---|---|---|
no-cache | 無 | 告知(代理)服務(wù)器不使用緩存顾孽,強(qiáng)制向服務(wù)器發(fā)起請(qǐng)求 |
no-store | 無 | 不緩存請(qǐng)求或相應(yīng)的任何內(nèi)容 |
max-age=seconds | 必須,單位:秒 | 告知服務(wù)器客戶端希望接收一個(gè)存在時(shí)間不大于(seconds)的資源 |
max-stale(=seconds) | 可省略比规,單位:秒 | 告知服務(wù)器愿意接收一個(gè)超過緩存時(shí)間的資源若厚,如果有指定seconds,則值為seconds蜒什,沒有指定則表示任意超出時(shí)間 |
min-refresh=seconds | 必須测秸,單位,秒 | 告知服務(wù)器希望接收一個(gè)在小于seconds秒內(nèi)被更新過的資源 |
no-transform | 無 | 告知服務(wù)器客戶端希望獲取實(shí)體數(shù)據(jù)沒有被轉(zhuǎn)換的資源(比如不被壓縮) |
only-if-cached | 無 | 告知服務(wù)器客戶端希望獲取緩存的內(nèi)容灾常,如果存在緩存霎冯,則不用向源服務(wù)器發(fā)去請(qǐng)求 |
cache-extension | - | 自定義擴(kuò)展值,若服務(wù)器不識(shí)別該值將被忽略掉 |
響應(yīng)頭中Cache-Control可選參數(shù)
字段名字 | 說明 | |
---|---|---|
public | 無 | 表明任何情況下都得緩存該資源(即使是需要HTTP認(rèn)證的資源) |
private[="filed-name"] | 可省略 | 表明趕回報(bào)文中全部或部分(若指定了filed-name則為filed-name的字段數(shù)據(jù))<br />僅開放給某些用戶(服務(wù)器指定的share-user钞瀑,如代理服務(wù)器)做緩存使用沈撞,<br />其他用戶則不能緩存這些數(shù)據(jù) |
no-cache | 可省略 | 不直接使用緩存,要向服務(wù)器確認(rèn)有效性 |
no-store | 無 | 不緩存請(qǐng)求或響應(yīng)的任何內(nèi)容 |
no-transform | 無 | 代理不可更改媒體類型 |
must-revalidate | 無 | 當(dāng)前資源一定是向源服務(wù)器發(fā)起請(qǐng)求驗(yàn)證有效性的雕什,若請(qǐng)求失敗返回504 |
proxy-revalidate | 無 | 要求代理緩存服務(wù)器對(duì)緩存有效性進(jìn)行再次確認(rèn) |
max-age=seconds | 必須缠俺,單位:秒 | 告知客戶端該資源的有效時(shí)間 |
s-maxage=seconds | 必須,單位:秒 | 公共緩存服務(wù)器相應(yīng)的最大age值 |
cache-extension | - | 自定義擴(kuò)展值贷岸,如果瀏覽器不識(shí)別該值將被忽略 |
需要注意的是以上這些參數(shù)都是需要使用HTTP1.1及以上才有用的壹士,其中no-store的優(yōu)先級(jí)最高。
常見的HTTP狀態(tài)碼
內(nèi)容源自菜鳥教程偿警,個(gè)人整理所需躏救,無意侵權(quán),源地址:
https://www.runoob.com/http/http-status-codes.html
狀態(tài)碼 | 英文名稱 | 描述 |
---|---|---|
200 | OK | 請(qǐng)求成功螟蒸。一般用于GET與POST請(qǐng)求 |
202 | Accepted | 已接受盒使。已經(jīng)接受請(qǐng)求睁本,但未處理完成 |
203 | Non-Authoritative Information | 非授權(quán)信息。請(qǐng)求成功忠怖。但返回的meta信息不在原始的服務(wù)器呢堰,而是一個(gè)副本 |
205 | Reset Content | 重置內(nèi)容。服務(wù)器處理成功凡泣,用戶終端(例如:瀏覽器)應(yīng)重置文檔視圖枉疼。可通過此返回碼清除瀏覽器的表單域 |
304 | Not Modified | 未修改鞋拟。所請(qǐng)求的資源未修改骂维,服務(wù)器返回此狀態(tài)碼時(shí),不會(huì)返回任何資源贺纲『焦耄客戶端通常會(huì)緩存訪問過的資源,通過提供一個(gè)頭信息指出客戶端希望只返回在指定日期之后修改的資源 |
305 | Use Proxy | 用代理猴誊。所請(qǐng)求的資源必須通過代理訪問 |
400 | Bad Request | 客戶端請(qǐng)求的語法錯(cuò)誤潦刃,服務(wù)器無法理解 |
401 | Unauthorized | 請(qǐng)求要求用戶的身份認(rèn)證 |
403 | Forbidden | 服務(wù)器理解請(qǐng)求客戶端的請(qǐng)求,但是拒絕執(zhí)行此請(qǐng)求 |
404 | Not Found | 服務(wù)器無法根據(jù)客戶端的請(qǐng)求找到資源(網(wǎng)頁)懈叹。通過此代碼乖杠,網(wǎng)站設(shè)計(jì)人員可設(shè)置"您所請(qǐng)求的資源無法找到"的個(gè)性頁面 |
405 | Method Not Allowed | 客戶端請(qǐng)求中的方法被禁止 |
406 | Not Acceptable | 服務(wù)器無法根據(jù)客戶端請(qǐng)求的內(nèi)容特性完成請(qǐng)求 |
408 | Request Time-out | 服務(wù)器等待客戶端發(fā)送的請(qǐng)求時(shí)間過長,超時(shí) |
500 | Internal Server Error | 服務(wù)器內(nèi)部錯(cuò)誤澄成,無法完成請(qǐng)求 |
502 | Bad Gateway | 作為網(wǎng)關(guān)或者代理工作的服務(wù)器嘗試執(zhí)行請(qǐng)求時(shí)胧洒,從遠(yuǎn)程服務(wù)器接收到了一個(gè)無效的響應(yīng) |
503 | Service Unavailable | 由于超載或系統(tǒng)維護(hù),服務(wù)器暫時(shí)的無法處理客戶端的請(qǐng)求墨状。延時(shí)的長度可包含在服務(wù)器的Retry-After頭信息中 |
504 | Gateway Time-out | 充當(dāng)網(wǎng)關(guān)或代理的服務(wù)器卫漫,未及時(shí)從遠(yuǎn)端服務(wù)器獲取請(qǐng)求 |
參考內(nèi)容:
上野宣《圖解HTTP》
https://blog.csdn.net/u012375924/article/details/82806617
http://www.reibang.com/p/cd9f28d35727
https://www.runoob.com/http/http-status-codes.html
本文由博客一文多發(fā)平臺(tái) OpenWrite 發(fā)布!