Http協(xié)商緩存
雖然http緩存完全是后端處理,但是前端也需要了解。
http緩存是通過 Cache-Control 響應(yīng)頭控制的
Cache-Control 的值和含義常用的有以下幾種:
public:中間的代理和客戶端都可以緩存,Cache-Control: max-age=60 就是默認(rèn) public
private:只有客戶端可以緩存,中間的代理不可以緩存
no-store:每次都請(qǐng)求最新的資源文件
no-cache: 協(xié)商緩存
Cache-Control: max-age=60 ,強(qiáng)制緩存60秒,60秒之后才會(huì)判斷協(xié)商緩存
下面說說協(xié)商緩存:
協(xié)商緩存有兩種:
1、Last-Modified(響應(yīng)頭)? ?If-Modified-Since(請(qǐng)求頭) 對(duì)應(yīng),單位是秒,表示文件的修改時(shí)間,通過對(duì)比 Last-Modified(響應(yīng)頭)???If-Modified-Since(請(qǐng)求頭)的值是否相等控制,相等則返回 304 狀態(tài)碼和舊的?Last-Modified ,不相等則返回 200 狀態(tài)碼和新的?Last-Modified?和新的資源文件
2、ETag(響應(yīng)頭)If-None-Match(請(qǐng)求頭) 對(duì)應(yīng),是根據(jù)文件內(nèi)容計(jì)算的一串字符
通過對(duì)比 ETag(響應(yīng)頭)If-None-Match(請(qǐng)求頭)的值控制,相等則返回 304 狀態(tài)碼和舊的?LETag?,不相等則返回 200 狀態(tài)碼和新的?ETag 和新的資源文件
優(yōu)先級(jí):Last-Modified 和?ETag 同時(shí)存在的情況下,ETag 優(yōu)先級(jí)更高。
原因:
1、文件操作一般是毫秒或者微秒級(jí)別的,Last-Modified 的單位是秒,可能不會(huì)把最新的資源文件返回,ETag是根據(jù)文件內(nèi)容等計(jì)算判斷是否有修改,可以返回客戶端最新的資源文件
2、資源文件可能是不斷重復(fù)刪除然后生成的,文件內(nèi)容可能沒有變化,但是修改時(shí)間卻變了,這個(gè)時(shí)候通過?Last-Modified 判斷會(huì)返回資源文件,但是其實(shí)不必,這樣就浪費(fèi)了流量,使用 ETag 就避免了這種情況。
附上一張http判斷緩存的流程圖:
