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