瀏覽器緩存機(jī)制Cache-Control
Cache-Control 是最重要的規(guī)則。這個字段用于指定所有緩存機(jī)制在整個請求/響應(yīng)鏈中必須服從的指令。這些指令指定用于阻止緩存對請求或響應(yīng)造成不利干擾的行為。這些指令通常覆蓋默認(rèn)緩存算法。緩存指令是單向的,即請求中存在一個指令并不意味著響應(yīng)中將存在同一個指令。
cache-control 定義是:Cache-Control = “Cache-Control” “:” cache-directive。表 1 展示了適用的值。
表 1. 常用 cache-directive 值
Cache-directive | 說明 | public所有內(nèi)容都將被緩存private內(nèi)容只緩存到私有緩存中no-cache所有內(nèi)容都不會被緩存no-store所有內(nèi)容都不會被緩存到緩存或 Internet 臨時文件中must-revalidation/proxy-revalidation如果緩存的內(nèi)容失效,請求必須發(fā)送到服務(wù)器/代理以進(jìn)行重新驗(yàn)證max-age=xxx (xxx is numeric)緩存的內(nèi)容將在 xxx 秒后失效, 這個選項(xiàng)只在HTTP 1.1可用, 并如果和Last-Modified一起使用時, 優(yōu)先級較高
表 2 表明在不同的情形下,瀏覽器是將請求重新發(fā)送到服務(wù)器還是使用緩存的內(nèi)容。
表 2. 對 cache-directive 值的瀏覽器響應(yīng)
Cache-directive | 打開一個新的瀏覽器窗口 | 在原窗口中單擊 Enter 按鈕 | 刷新 | 單擊 Back 按鈕 | public瀏覽器呈現(xiàn)來自緩存的頁面瀏覽器呈現(xiàn)來自緩存的頁面瀏覽器重新發(fā)送請求到服務(wù)器瀏覽器呈現(xiàn)來自緩存的頁面private瀏覽器重新發(fā)送請求到服務(wù)器第一次,瀏覽器重新發(fā)送請求到服務(wù)器;此后,瀏覽器呈現(xiàn)來自緩存的頁面瀏覽器重新發(fā)送請求到服務(wù)器瀏覽器呈現(xiàn)來自緩存的頁面no-cache/no-store瀏覽器重新發(fā)送請求到服務(wù)器瀏覽器重新發(fā)送請求到服務(wù)器瀏覽器重新發(fā)送請求到服務(wù)器瀏覽器重新發(fā)送請求到服務(wù)器must-revalidation/proxy-revalidation瀏覽器重新發(fā)送請求到服務(wù)器第一次,瀏覽器重新發(fā)送請求到服務(wù)器;此后,瀏覽器呈現(xiàn)來自緩存的頁面瀏覽器重新發(fā)送請求到服務(wù)器瀏覽器呈現(xiàn)來自緩存的頁面max-age=xxx (xxx is numeric)在 xxx 秒后,瀏覽器重新發(fā)送請求到服務(wù)器在 xxx 秒后,瀏覽器重新發(fā)送請求到服務(wù)器瀏覽器重新發(fā)送請求到服務(wù)器在 xxx 秒后,瀏覽器重新發(fā)送請求到服務(wù)器
Cache-Control是關(guān)于瀏覽器緩存的最重要的設(shè)置,因?yàn)樗采w其他設(shè)置,比如 Expires 和 Last-Modified。另外,由于瀏覽器的行為基本相同,這個屬性是處理跨瀏覽器緩存問題的最有效的方法。
失效
Expires 頭部字段提供一個日期和時間,響應(yīng)在該日期和時間后被認(rèn)為失效。失效的緩存條目通常不會被緩存(無論是代理緩存還是用戶代理緩存)返回,除非首先通過原始服務(wù)器(或者擁有該實(shí)體的最新副本的中介緩存)驗(yàn)證。(注意:cache-control max-age 和 s-maxage 將覆蓋 Expires 頭部。)
Expires 字段接收以下格式的值:“Expires: Sun, 08 Nov 2009 03:37:26 GMT”。如果查看內(nèi)容時的日期在給定的日期之前,則認(rèn)為該內(nèi)容沒有失效并從緩存中提取出來。反之,則認(rèn)為該內(nèi)容失效,緩存將采取一些措施。表 3-6 表明針對不同用戶操作的不同瀏覽器的行為。
表 3. 當(dāng)用戶打開一個新的瀏覽器窗口時的失效操作
| Firefox 3.5 | IE 8 | Chrome 3 | Safari 4 | 內(nèi)容沒有失效瀏覽器呈現(xiàn)來自緩存的頁面瀏覽器重新發(fā)送請求到服務(wù)器。返回代碼是 200瀏覽器呈現(xiàn)來自緩存的頁面瀏覽器呈現(xiàn)來自緩存的頁面內(nèi)容失效瀏覽器重新發(fā)送請求到服務(wù)器。返回代碼是 200瀏覽器重新發(fā)送請求到服務(wù)器。返回代碼是 200瀏覽器重新發(fā)送請求到服務(wù)器。返回代碼是 200瀏覽器重新發(fā)送請求到服務(wù)器。返回代碼是 200
表 4. 當(dāng)用戶在原始瀏覽器窗口中單擊 Enter 按鈕時的失效操作
| Firefox 3.5 | IE 8 | Chrome 3 | Safari 4 | 內(nèi)容沒有失效瀏覽器呈現(xiàn)來自緩存的頁面瀏覽器呈現(xiàn)來自緩存的頁面瀏覽器重新發(fā)送請求到服務(wù)器。返回代碼是 304瀏覽器重新發(fā)送請求到服務(wù)器。返回代碼是 304內(nèi)容失效瀏覽器重新發(fā)送請求到服務(wù)器。返回代碼是 200瀏覽器呈現(xiàn)來自緩存的頁面瀏覽器重新發(fā)送請求到服務(wù)器。返回代碼是 200瀏覽器重新發(fā)送請求到服務(wù)器。返回代碼是 200
表 5. 當(dāng)用戶按 F5 鍵刷新頁面時的失效操作
| Firefox 3.5 | IE 8 | Chrome 3 | Safari 4 | 內(nèi)容沒有失效瀏覽器重新發(fā)送請求到服務(wù)器。返回代碼是 304瀏覽器重新發(fā)送請求到服務(wù)器。返回代碼是 304瀏覽器重新發(fā)送請求到服務(wù)器。返回代碼是 304瀏覽器重新發(fā)送請求到服務(wù)器。返回代碼是 304內(nèi)容失效瀏覽器重新發(fā)送請求到服務(wù)器。返回代碼是 200瀏覽器重新發(fā)送請求到服務(wù)器。返回代碼是 200瀏覽器重新發(fā)送請求到服務(wù)器。返回代碼是 200瀏覽器重新發(fā)送請求到服務(wù)器。返回代碼是 200
表 6. 當(dāng)用戶單擊 Back 或 Forward 按鈕時的失效操作
| Firefox 3.5 | IE 8 | Chrome 3 | Safari 4 | 內(nèi)容沒有失效瀏覽器呈現(xiàn)來自緩存的頁面瀏覽器呈現(xiàn)來自緩存的頁面瀏覽器呈現(xiàn)來自緩存的頁面瀏覽器呈現(xiàn)來自緩存的頁面內(nèi)容失效瀏覽器呈現(xiàn)來自緩存的頁面瀏覽器呈現(xiàn)來自緩存的頁面瀏覽器呈現(xiàn)來自緩存的頁面瀏覽器重新發(fā)送請求到服務(wù)器。返回代碼是 200
注意:所有瀏覽器都假定為使用默認(rèn)設(shè)置運(yùn)行。
Last-Modified/E-Tag
Last-Modified 實(shí)體頭部字段值通常用作一個緩存驗(yàn)證器。簡單來說,如果實(shí)體值在 Last-Modified 值之后沒有被更改,則認(rèn)為該緩存條目有效。ETag 響應(yīng)頭部字段值是一個實(shí)體標(biāo)記,它提供一個 “不透明” 的緩存驗(yàn)證器。這可能在以下幾種情況下提供更可靠的驗(yàn)證:不方便存儲修改日期;HTTP 日期值的 one-second 解決方案不夠用;或者原始服務(wù)器希望避免由于使用修改日期而導(dǎo)致的某些沖突。
不同的瀏覽器有不同的配置行為。表 7-10 表明針對不同用戶操作的不同瀏覽器的行為。
表 7. 當(dāng)用戶打開一個新的瀏覽器窗口時的 Last-Modified E-Tag 操作
| Firefox 3.5 | IE 8 | Chrome 3 | Safari 4 | 內(nèi)容自上次訪問以來沒有被修改瀏覽器重新發(fā)送請求到服務(wù)器。返回代碼是 304瀏覽器重新發(fā)送請求到服務(wù)器。返回代碼是 200瀏覽器重新發(fā)送請求到服務(wù)器。返回代碼是 304瀏覽器重新發(fā)送請求到服務(wù)器。返回代碼是 304內(nèi)容自上次訪問以來已經(jīng)被修改瀏覽器重新發(fā)送請求到服務(wù)器。返回代碼是 200瀏覽器重新發(fā)送請求到服務(wù)器。返回代碼是 200瀏覽器重新發(fā)送請求到服務(wù)器。返回代碼是 200瀏覽器重新發(fā)送請求到服務(wù)器。返回代碼是 200
表 8. 當(dāng)用戶在原始瀏覽器窗口中單擊 Enter 按鈕時的 Last-Modified E-Tag 操作
| Firefox 3.5 | IE 8 | Chrome 3 | Safari 4 | 內(nèi)容自上次訪問以來沒有被修改瀏覽器呈現(xiàn)來自緩存的頁面瀏覽器呈現(xiàn)來自緩存的頁面瀏覽器重新發(fā)送請求到服務(wù)器。返回代碼是 304瀏覽器重新發(fā)送請求到服務(wù)器。返回代碼是 304內(nèi)容自上次訪問以來已經(jīng)被修改瀏覽器重新發(fā)送請求到服務(wù)器。返回代碼是 200瀏覽器呈現(xiàn)來自緩存的頁面瀏覽器重新發(fā)送請求到服務(wù)器。返回代碼是 200瀏覽器重新發(fā)送請求到服務(wù)器。返回代碼是 200
表 9. 當(dāng)用戶按 F5 鍵刷新頁面時的 Last-Modified E-Tag 操作
| Firefox 3.5 | IE 8 | Chrome 3 | Safari 4 | 內(nèi)容自上次訪問以來沒有被修改瀏覽器重新發(fā)送請求到服務(wù)器。返回代碼是 304瀏覽器重新發(fā)送請求到服務(wù)器。返回代碼是 304瀏覽器重新發(fā)送請求到服務(wù)器。返回代碼是 304瀏覽器重新發(fā)送請求到服務(wù)器。返回代碼是 304內(nèi)容自上次訪問以來已經(jīng)被修改瀏覽器重新發(fā)送請求到服務(wù)器。返回代碼是 200瀏覽器重新發(fā)送請求到服務(wù)器。返回代碼是 200瀏覽器重新發(fā)送請求到服務(wù)器。返回代碼是 200瀏覽器重新發(fā)送請求到服務(wù)器。返回代碼是 200
欲知詳情,請下載word文檔 下載文檔