摘要:原文鏈接瀏覽器緩存瀏覽器緩存強(qiáng)緩存協(xié)商緩存強(qiáng)緩存釋義客戶端第一次問(wèn)服務(wù)器要某個(gè)資源時(shí),服務(wù)器丟還給客戶端所請(qǐng)求的這個(gè)資源同時(shí),告訴客戶端將這個(gè)資源保存在本地,并且在未來(lái)的某個(gè)時(shí)點(diǎn)之前如果還需要這個(gè)資源,直接從本地獲取就行了,不用向服務(wù)器請(qǐng)求
原文鏈接:瀏覽器緩存
瀏覽器緩存 強(qiáng)緩存 & 協(xié)商緩存
強(qiáng)緩存
釋義: 客戶端第一次問(wèn)服務(wù)器要某個(gè)資源時(shí),服務(wù)器丟還給客戶端所請(qǐng)求的這個(gè)資源同時(shí),告訴客戶端將這個(gè)資源保存在本地,并且在未來(lái)的某個(gè)時(shí)點(diǎn)之前如果還需要這個(gè)資源,直接從本地獲取就行了,不用向服務(wù)器請(qǐng)求.這種方式緩存下來(lái)的資源稱為強(qiáng)緩存.
Expires & Cache-Control:max-age
Expires:
該字段是http1.0時(shí)的規(guī)范,值為一個(gè)絕對(duì)時(shí)間的GMT格式的時(shí)間字符串,代表緩存資源的過(guò)期時(shí)間,在這個(gè)時(shí)點(diǎn)之前,即命中緩存.
Cache-Control:
該字段是http1.0時(shí)的規(guī)范,值為一個(gè)絕對(duì)時(shí)間的GMT格式的時(shí)間字符串,代表緩存資源的過(guò)期時(shí)間,在這個(gè)時(shí)點(diǎn)之前,即命中緩存.
參數(shù):
no-cache: 如果請(qǐng)求頭部包含no-cache指令,表示客戶端不接收緩存過(guò)的響應(yīng).中間緩存服務(wù)器必須將請(qǐng)求轉(zhuǎn)發(fā)給給源服務(wù)器. 瀏覽器強(qiáng)制刷新(window下ctrl+F5)就是這個(gè)原理,所以的請(qǐng)求都設(shè)置no-cache
no-store: 暗示請(qǐng)求和響應(yīng)包含機(jī)密信息,不能進(jìn)行緩存.
區(qū)分: no-store才是真正的不緩存
max-age: 該指令用來(lái)標(biāo)識(shí)緩存資源的最大有效期. 如果max-age=0,就會(huì)向源服務(wù)器發(fā)送請(qǐng)求進(jìn)行緩存資源新鮮度的驗(yàn)證.瀏覽器普通刷新F5
cache-directive 作為請(qǐng)求首部時(shí),cache-directive 的可選值有:
字段名稱 | 說(shuō)明 |
---|---|
no-cache | 告知(代理)服務(wù)器不直接使用緩存,要求向原服務(wù)器發(fā)起請(qǐng)求. |
no-store | 所有內(nèi)容都不會(huì)保存到緩存或者Internet臨時(shí)文件中. |
max-age=delta-seconds | 告知 (代理)服務(wù)器,客戶端希望接收一個(gè)存在時(shí)間不大于detal-seconds秒的資源. |
max-stale[=delta-seconds | 告知 (代理)服務(wù)器,客戶端愿意接收一個(gè)超過(guò)緩存時(shí)間的資源,若有定義delta-seconds則為delta-seconds,若沒(méi)有則為任意超出的時(shí)間. |
min-fresh=delta-seconds | 告知 (代理)服務(wù)器,客戶端希望接收一個(gè)在小于delta-seconds秒內(nèi)被更新過(guò)的資源. |
no-transform | 告知 (代理)服務(wù)器,客戶端希望獲取實(shí)體數(shù)據(jù)沒(méi)有被轉(zhuǎn)換(比如壓縮)過(guò)的資源. |
only-if-cached | 告知 (代理)服務(wù)器,客戶端希望獲取換成的內(nèi)容(若有),而不用向原來(lái)服務(wù)器請(qǐng)求. |
cache-extension | 自定義擴(kuò)展值,若服務(wù)器不識(shí)別改值則會(huì)被忽略. |
cache-directive 作為響應(yīng)首部時(shí),cache-directive 的可選值有:
字段名稱 | 說(shuō)明 |
---|---|
public | 表明任何情況下都得緩存該資源(即使是需要HTTP認(rèn)證的資源). |
Private[="field-name"] | 表明返回報(bào)文中全部或者部分(若指定field-name,則為field-name的字段數(shù)據(jù))僅開(kāi)放給某些用戶(服務(wù)器指定的share-user,如代理服務(wù)器)做緩存使用,其他用戶則不能緩存這些數(shù)據(jù). |
no-cache | 不直接使用緩存,要向服務(wù)器發(fā)起(新鮮度校驗(yàn))請(qǐng)求. |
no-store | 所有內(nèi)容都不會(huì)保存到緩存或者Internet臨時(shí)文件中. |
no-transform | 告知客戶端緩存文件時(shí)不得對(duì)實(shí)體數(shù)據(jù)做任何改變. |
only-if-cached | 告知(代理)服務(wù)器,客戶端希望獲取緩存的內(nèi)容(如果有),而不向原來(lái)服務(wù)器發(fā)起請(qǐng)求. |
must-revalidate | 當(dāng)前資源一定是向原服務(wù)器發(fā)起驗(yàn)證請(qǐng)求的,若請(qǐng)求失敗會(huì)返回504(而非代理服務(wù)器上的緩存). |
proxy-revalidate | 與must-revalidate類似,但僅能應(yīng)用于共享緩存(如代理). |
max-age=delta-seconds | 告知客戶端,該資源在delta-seconds秒內(nèi)是新鮮的,無(wú)需向 服務(wù)器發(fā)起請(qǐng)求. |
s-max-age=delta-seconds | 同max-age,但僅用于共享緩存(如代理). |
cache-extension | 自定義擴(kuò)展值,若服務(wù)器不識(shí)別改值則會(huì)被忽略. |
在請(qǐng)求頭中max-age=0與no-cache的區(qū)別?
返回的狀態(tài)來(lái)看:no-cache都是200,而max-age可能是304(如果瀏覽器有緩存). 請(qǐng)求參數(shù):max-age請(qǐng)求頭一般會(huì)攜帶If-Modified-Since或If-None-Match字段進(jìn)行新鮮度驗(yàn)證,而no-cache不會(huì)攜帶. F5刷新是max-age=0來(lái)實(shí)現(xiàn),而強(qiáng)制刷新(Ctrl+F5)是通過(guò)no-cache實(shí)現(xiàn).
異同: Expires是HTTP 1.0+的首部,用來(lái)指定一個(gè)絕對(duì)的過(guò)期日期,依賴客戶端時(shí)間設(shè)置的準(zhǔn)確性,緩存時(shí)間是相對(duì)服務(wù)器上的時(shí)間而言的.
而max-age是HTTP/1.1的Cache-Control的一個(gè)字段,用來(lái)指定文檔的最大使用時(shí)間.
協(xié)商緩存
釋義: 客戶端第一次問(wèn)服務(wù)器要某個(gè)資源時(shí),服務(wù)器丟還給客戶端所請(qǐng)求的這個(gè)資源同時(shí),將該資源的一些信息(文件摘要、或者最后修改時(shí)間)也返回給客戶端,告訴客戶端將這個(gè)資源緩存在本地.當(dāng)客戶端下一次需要這個(gè)資源時(shí),將請(qǐng)求以及相關(guān)信息(文件摘要、或者最后修改時(shí)間)一并發(fā)送給服務(wù)器,由服務(wù)器來(lái)判斷客戶端緩存的資源是否需要更新:如不需要更新,就直接告訴客戶端獲取本地緩存資源;如需要更新,則將最新的資源連同相應(yīng)的信息一并返回給客戶端.
Last-Modified & If-Modified-Since & Etag & If-None-Match
Last-Modidied & If-Modified-Since:
Last-Modified: 為實(shí)體首部字段,值為資源最后更新時(shí)間,隨服務(wù)器response返回.
If-Modified-Since: 為請(qǐng)求首部字段,通過(guò)比較兩個(gè)時(shí)間來(lái)判斷資源在兩次請(qǐng)求期間是否有過(guò)修改,如果沒(méi)有修改,則命中協(xié)商緩存,瀏覽器從緩存中獲取資源;如果有過(guò)修改,則服務(wù)器返回資源,同時(shí)返回新的Last-Modified時(shí)間.
Etag & If-None-Match:
Etag: 為相應(yīng)頭部字段,表示資源內(nèi)容的唯一標(biāo)識(shí),隨服務(wù)器response返回.
If-None-Match: 為請(qǐng)求頭部字段,服務(wù)器通過(guò)比較請(qǐng)求頭部的If-None-Match與當(dāng)前資源的ETag是否一致來(lái)判斷資源是否在兩次請(qǐng)求之間有過(guò)修改,如果沒(méi)有修改,則命中協(xié)商緩存,瀏覽器從緩存中獲取資源;如果有過(guò)修改,則服務(wù)器返回資源,同時(shí)返回新的ETag.
不能緩存的請(qǐng)求
HTTP信息頭中包含Cache-Control:no-cache,pragma:no-cache(HTTP1.0),或Cache-Control:max-age=0等告訴瀏覽器不用緩存的請(qǐng)求. Cache-Control: no-cache:這個(gè)很容易讓人產(chǎn)生誤解,使人誤以為是響應(yīng)不被緩存.實(shí)際上Cache-Control: no-cache是會(huì)被緩存的,只不過(guò)每次在向客戶端(瀏覽器)提供響應(yīng)數(shù)據(jù)時(shí),緩存都要向服務(wù)器評(píng)估緩存響應(yīng)的有效性.
需要根據(jù)Cookie,認(rèn)證信息等決定輸入內(nèi)容的動(dòng)態(tài)請(qǐng)求是不能被緩存的.
經(jīng)過(guò)HTTPS安全加密的請(qǐng)求.
POST請(qǐng)求無(wú)法被緩存.
HTTP響應(yīng)頭中不包含Last-Modified/Etag,也不包含Cache-Control/Expires的請(qǐng)求無(wú)法被緩存.
瀏覽器緩存機(jī)制示意圖
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/62040.html
摘要:告知瀏覽器我希望內(nèi)容來(lái)自緩存我并不關(guān)心被緩存響應(yīng)是否是新鮮的??蛻舳苏?qǐng)求驗(yàn)證緩存的有效性。 因?yàn)樽罱嬖嚱?jīng)常會(huì)被問(wèn)到304緩存的問(wèn)題,因此在網(wǎng)上搜集了各種資料,小記一下 緩存有瀏覽器緩存,代理服務(wù)器緩存,服務(wù)端緩存等,這里著重記一下瀏覽器緩存 瀏覽器第一次像服務(wù)器發(fā)起請(qǐng)求時(shí),如果有緩存,瀏覽器在返回信息里面會(huì)帶上相應(yīng)的緩存策略,下面介紹一下有哪些常用的緩存策略。 Expires 過(guò)期...
摘要:最近在全力整理高性能的文檔,并重新學(xué)習(xí)一遍,放在這里方便大家查看并找到自己需要的知識(shí)點(diǎn)。 最近在全力整理《高性能JavaScript》的文檔,并重新學(xué)習(xí)一遍,放在這里方便大家查看并找到自己需要的知識(shí)點(diǎn)。 前端開(kāi)發(fā)文檔 高性能JavaScript 第1章:加載和執(zhí)行 腳本位置 阻止腳本 無(wú)阻塞的腳本 延遲的腳本 動(dòng)態(tài)腳本元素 XMLHTTPRequest腳本注入 推薦的無(wú)阻塞模式...
摘要:為了優(yōu)化性能,使用緩存是一種比較常見(jiàn)的手段。由于篇幅原因,本篇重點(diǎn)講述緩存。緩存未命中達(dá)緩存的請(qǐng)求沒(méi)有副本可用,而被轉(zhuǎn)發(fā)給原始服務(wù)器,與緩存命中相反。協(xié)商緩存協(xié)商緩存是在用戶強(qiáng)緩存失敗的情況下,向服務(wù)器端進(jìn)行再驗(yàn)證。 為了優(yōu)化性能,使用緩存是一種比較常見(jiàn)的手段。那么如何實(shí)現(xiàn)緩存以及如何避免緩存呢,都是要探討的話題??梢詮娜齻€(gè)部分:http 緩存、cookie、localStorage&...
摘要:導(dǎo)言本文將列舉站點(diǎn)常用緩存技術(shù)的基本概念與特點(diǎn),為想要了解緩存技術(shù)的讀者們提供提綱式的技術(shù)介紹。這些指令指定用于阻止緩存對(duì)請(qǐng)求或響應(yīng)造成不利干擾的行為。參考連接網(wǎng)站緩存技術(shù)總結(jié)高性能網(wǎng)站的關(guān)鍵緩存靜態(tài)資源緩存 導(dǎo)言:本文將列舉web站點(diǎn)常用緩存技術(shù)的基本概念與特點(diǎn),為想要了解web緩存技術(shù)的讀者們提供提綱式的技術(shù)介紹。 在互聯(lián)網(wǎng)迅速發(fā)展的今天,一個(gè)互聯(lián)網(wǎng)站點(diǎn)的請(qǐng)求量是十分驚人的,動(dòng)輒上...
摘要:二目的是一個(gè)經(jīng)策略性部署的整體系統(tǒng),從技術(shù)上全面解決由于網(wǎng)絡(luò)帶寬小用戶訪問(wèn)量大網(wǎng)點(diǎn)分布不均而產(chǎn)生的用戶訪問(wèn)網(wǎng)站響應(yīng)速度慢的根本原因。 一、CDN全稱:??Content Delivery Network或Content Ddistribute Network,即內(nèi)容分發(fā)網(wǎng)絡(luò)。 ??二、目的:??CDN是一個(gè)經(jīng)策略性部署的整體系統(tǒng),從技術(shù)上全面解決由于網(wǎng)絡(luò)帶寬小、用戶訪問(wèn)量大、網(wǎng)點(diǎn)分布不...
摘要:原文鏈接瀏覽器緩存瀏覽器緩存強(qiáng)緩存協(xié)商緩存強(qiáng)緩存釋義客戶端第一次問(wèn)服務(wù)器要某個(gè)資源時(shí),服務(wù)器丟還給客戶端所請(qǐng)求的這個(gè)資源同時(shí),告訴客戶端將這個(gè)資源保存在本地,并且在未來(lái)的某個(gè)時(shí)點(diǎn)之前如果還需要這個(gè)資源,直接從本地獲取就行了,不用向服務(wù)器請(qǐng)求 原文鏈接:瀏覽器緩存 瀏覽器緩存 強(qiáng)緩存 & 協(xié)商緩存 強(qiáng)緩存 釋義: 客戶端第一次問(wèn)服務(wù)器要某個(gè)資源時(shí),服務(wù)器丟還給客戶端所請(qǐng)求的這個(gè)資源...
閱讀 1158·2023-04-25 17:51
閱讀 2938·2021-11-23 09:51
閱讀 1558·2021-11-08 13:21
閱讀 2594·2021-09-22 15:14
閱讀 1584·2019-08-30 12:48
閱讀 1146·2019-08-29 12:44
閱讀 1198·2019-08-26 12:21
閱讀 1454·2019-08-26 10:47