為了減少資源請求次數(shù),加快資源訪問速度,瀏覽器對資源文件如圖片、css文件、js文件等有一個緩存功能。而瀏覽器緩存策略又分為強緩存和協(xié)商緩存

強緩存
所謂強緩存可以理解為強制緩存的意思,即瀏覽器在訪問某個資源時會判斷是否使用本地緩存理已經(jīng)存在的資源文件,使用本地緩存的話則不會發(fā)送請求到服務器,從而達到減輕服務器訪問壓力的作用,且由于直接從本地緩存讀取資源文件,大大提高了加載速度
強緩存的具體流程為:
- 瀏覽器第一次請求遠程服務器的某個資源時,如果服務器希望瀏覽器得到該資源后一段時間內(nèi)不要再發(fā)送請求過來,直接從瀏覽器里的緩存讀取,則服務器可以通過在響應頭里設置
Cache-Control:max-age
屬性
max-age代表緩存時間單位為毫秒,這里的數(shù)據(jù)換算過來就是一年,意味著在一年內(nèi)瀏覽器不會再向服務器發(fā)送請求,使用緩存的話,狀態(tài)碼200后面會標明情況,像這樣
- 瀏覽器緩存資源的地方有兩個,磁盤緩存(disk cache)和內(nèi)存緩存(memory cache)
當緩存時間到期后再次訪問時,狀態(tài)碼200后面便沒有括號內(nèi)的內(nèi)容了
- 強緩存除了使用Cache-Control實現(xiàn)之外,還可以使用
Expires
字段,Expires是HTTP1.0的規(guī)范,Cache-Control是HTTP1.1的規(guī)范,。Expires返回一個具體的時間值,代表緩存的有效期,在該日期內(nèi)瀏覽器不會向服務器發(fā)起請求,而是直接從緩存里獲取資源 ,因為Expires參照的是本地客戶端的時間,而客戶端的時間是可以被修改的,所以會有誤差產(chǎn)生的情況,這也是Expires的一個缺點,所以有了后來HTTP1.1規(guī)范的Cache-Control。另外Cache-Control的優(yōu)先級要高于Expires,如果兩者同時設置,會優(yōu)先使用Cache-Control,而忽略掉Expires - 在強緩存里是否使用緩存是由瀏覽器來確定的
協(xié)商緩存
協(xié)商緩存是由粗武器來告訴瀏覽器是否使用緩存i資源,也就是瀏覽器每一次都要發(fā)送請求到服務器詢問是否使用緩存
協(xié)商緩存的具體流程為:
- 瀏覽器初次請求資源,服務器返回資源,同時生成一個Etag值攜帶在響應頭里返回給瀏覽器
- 瀏覽器再次請求資源時會在請求頭里攜帶If-None-Match,值是之前服務器返回的Etage的值
- 服務器收到之后拿該值與資源文件最新的Etag值做對比,如果沒有變化則返回304 ,告訴瀏覽器繼續(xù)使用緩存(不返回資源文件)
- 如果發(fā)生變化,則返回200和最新的資源文件給瀏覽器使用
除了Etag之外,瀏覽器還有一個Last-Modified
的屬性,t他是http1.0規(guī)范的,服務器返回Last-Modified,瀏覽器請求頭對應攜帶的是If-Modified-since
與Etag不同的是,Last-Modified的值是一個時間值,代表文件的修改時間,服務器通過對比文件的修改時間是否發(fā)生改變來判斷是否使用緩存,相比于Last-Modified,Etag的優(yōu)先級更高,使用上也更精確一些
因為有時候會存在文件內(nèi)容沒有被改變,但文件的修改時間變更了,Last-Modified不一致所以服務器會重新返回資源文件,實際上還是可以繼續(xù)使用緩存的
最后普及一下常用的緩存文章來源:http://www.zghlxwxcb.cn/news/detail-722377.html
總結一下:文章來源地址http://www.zghlxwxcb.cn/news/detail-722377.html
- 強緩存就哦i是瀏覽器本地根據(jù)服務器設置的過期時間來判斷是否使用緩存,未過期則從本地里拿資源,已過期則重新請求服務器獲取最新的資源
- 協(xié)商緩存則是瀏覽器本地每次都向服務器發(fā)起請求,由服務器來告訴瀏覽器是從緩存里拿資源還是返回最新資源給瀏覽器使用
- 強緩存優(yōu)先級大于協(xié)商緩存,即兩者同時存在時,如果強緩存開啟且在有效期內(nèi),則不會走協(xié)商緩存
到了這里,關于強緩存與協(xié)商緩存的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!