最近2018中文字幕在日韩欧美国产成人片_国产日韩精品一区二区在线_在线观看成年美女黄网色视频_国产精品一区三区五区_国产精彩刺激乱对白_看黄色黄大色黄片免费_人人超碰自拍cao_国产高清av在线_亚洲精品电影av_日韩美女尤物视频网站

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
學(xué)會(huì)這篇就夠了,徹底弄懂前端緩存了

分類

前端緩存分為強(qiáng)緩存和協(xié)商緩存兩種。

創(chuàng)新互聯(lián)建站是一家朝氣蓬勃的網(wǎng)站建設(shè)公司。公司專注于為企業(yè)提供信息化建設(shè)解決方案。從事網(wǎng)站開(kāi)發(fā),網(wǎng)站制作,網(wǎng)站設(shè)計(jì),網(wǎng)站模板,微信公眾號(hào)開(kāi)發(fā),軟件開(kāi)發(fā),小程序開(kāi)發(fā),10多年建站對(duì)水處理設(shè)備等多個(gè)行業(yè),擁有豐富的網(wǎng)站維護(hù)經(jīng)驗(yàn)。

強(qiáng)緩存

強(qiáng)緩存主要使用Expires、Cache-Control 兩個(gè)頭字段,兩者同時(shí)存在Cache-Control 優(yōu)先級(jí)更高。當(dāng)命中強(qiáng)緩存的時(shí)候,客戶端不會(huì)再求,直接從緩存中讀取內(nèi)容,并返回HTTP狀態(tài)碼200。

  • Expires

響應(yīng)頭,代表該資源的過(guò)期時(shí)間。是一個(gè)GMT 格式的標(biāo)準(zhǔn)時(shí)間。

當(dāng)客戶端請(qǐng)求服務(wù)器的時(shí)候,服務(wù)器會(huì)返回資源的同時(shí)還會(huì)帶上響應(yīng)頭Expires,表示資源的過(guò)期具體時(shí)間,如果客戶端在過(guò)期時(shí)間之前再次獲取該資源,就不需要再請(qǐng)求我服務(wù)器了,可以直接在緩存里面拿。

使用Expires強(qiáng)緩存優(yōu)點(diǎn):

  • 在過(guò)期時(shí)間以內(nèi),為用戶省了很多流量。
  • 減少了服務(wù)器重復(fù)讀取磁盤(pán)文件的壓力。

使用Expires強(qiáng)緩存缺點(diǎn)

  • 緩存過(guò)期以后,服務(wù)器不管文件有沒(méi)有變化會(huì)再次請(qǐng)求服務(wù)器。
  • 緩存過(guò)期時(shí)間是一個(gè)具體的時(shí)間,這個(gè)時(shí)間依賴于客戶端的時(shí)間,如果時(shí)間不準(zhǔn)確或者被改動(dòng)緩存也會(huì)隨之受到影響。
  • Cache-Control

 請(qǐng)求/響應(yīng)頭,緩存控制字段,精確控制緩存策略。

為了讓強(qiáng)緩存更精確,HTTP1.1增加了Cache-Control字段。Cache-Control既能出現(xiàn)在請(qǐng)求頭又能出現(xiàn)在響應(yīng)頭,其不同的值代表不同的意思,下面我們具體分析一下。

Cache-Control 服務(wù)端參數(shù):

  • max-age: 在多少秒內(nèi)有效,是一個(gè)相對(duì)時(shí)間,這樣比Expires具體的時(shí)間就更精確了。
  • s-maxage: 就是用于表示 cache 服務(wù)器上(比如 cache CDN,緩存代理服務(wù)器)的緩存的有效時(shí)間的,并只對(duì) public 緩存有效。
  • no-cache:不使用本地強(qiáng)緩存。需要使用緩存協(xié)商。
  • no-store:直接禁止瀏覽器緩存數(shù)據(jù),每次用戶請(qǐng)求該資源,都會(huì)向服務(wù)器發(fā)送一個(gè)請(qǐng)求,每次都會(huì)下載完整的資源。
  • public:可以被所有的用戶緩存,包括終端用戶和中間代理服務(wù)器。
  • private:只能被終端用戶的瀏覽器緩存,不允許中間緩存代理進(jìn)行緩存,默認(rèn)的。

Cache-Control 客戶端參數(shù):

  • max-stale: 5 表示客戶端到代理服務(wù)器上拿緩存的時(shí)候,即使代理緩存過(guò)期了也不要緊,只要過(guò)期時(shí)間在 5 秒之內(nèi),還是可以從代理中獲取的。
  • min-fresh: 5 表示代理緩存需要一定的新鮮度,不要等到緩存剛好到期再拿,一定要在到期前 5 秒之前的時(shí)間拿,否則拿不到。
  • only-if-cached 這個(gè)字段加上后表示客戶端只會(huì)接受代理緩存,而不會(huì)接受源服務(wù)器的響應(yīng)。如果代理緩存無(wú)效,則直接返回 504(Gateway Timeout)。

協(xié)商緩存

協(xié)商緩存主要有四個(gè)頭字段,它們兩兩組合配合使用,If-Modified-Since 和 Last-Modified一組,Etag 和 If-None-Match一組,當(dāng)同時(shí)存在的時(shí)候會(huì)以Etag 和 If-None-Match為主。當(dāng)命中協(xié)商緩存的時(shí)候,服務(wù)器會(huì)返回HTTP狀態(tài)碼304,讓客戶端直接從本地緩存里面讀取文件。

  • If-Modified-Since

 請(qǐng)求頭,資源最近修改時(shí)間,由瀏覽器告訴服務(wù)器。其實(shí)就是第一次訪問(wèn)服務(wù)端返回的Last-Modified的值。

  • Last-Modified

 響應(yīng)頭,資源最近修改時(shí)間,由服務(wù)器告訴瀏覽器。

  • Etag

 響應(yīng)頭,資源標(biāo)識(shí),由服務(wù)器告訴瀏覽器。

  • If-None-Match

請(qǐng)求頭,緩存資源標(biāo)識(shí),由瀏覽器告訴服務(wù)器。其實(shí)就是第一次訪問(wèn)服務(wù)端返回的Etag的值。

If-Modified-Since 和 Last-Modified

當(dāng)客戶端第一次請(qǐng)求服務(wù)器的時(shí)候,服務(wù)端會(huì)返回一個(gè)Last-Modified響應(yīng)頭,該字段是一個(gè)標(biāo)準(zhǔn)時(shí)間。客戶端請(qǐng)求服務(wù)器的時(shí)候會(huì)帶上If-Modified-Since請(qǐng)求頭字段,該字段的值就是服務(wù)器返回的Last-Modified的值。服務(wù)器接收到請(qǐng)求后會(huì)比較這兩個(gè)值是否一樣,一樣就返回304,讓客戶端從緩存中讀取,不一樣就會(huì)返回新文件給客戶端并更新Last-Modified響應(yīng)頭字段的值。

使用If-Modified-Since 和 Last-Modified的優(yōu)點(diǎn):

  • 當(dāng)緩存有效時(shí)服務(wù)器不會(huì)返回文件給客戶端,而是直接返回304狀態(tài)碼,讓客戶端從緩存中獲取文件。大大節(jié)省了流量和帶寬以及服務(wù)器的壓力。

使用If-Modified-Since 和 Last-Modified的缺點(diǎn):

  • Last-Modified 過(guò)期時(shí)間只能精確到秒。如果在同一秒既修改了文件又獲取文件,客戶端是獲取不到最新文件的。

Etag 和 If-None-Match

為了解決文件修改時(shí)間只能精確到秒帶來(lái)的問(wèn)題,我們引入 Etag 響應(yīng)頭。Etag 是由文件修改時(shí)間與文件大小計(jì)算而成,只有當(dāng)文件文件內(nèi)容或修改時(shí)間變了Etag的值才會(huì)發(fā)生變化。

當(dāng)客戶端第一次請(qǐng)求服務(wù)器的時(shí)候,服務(wù)端會(huì)返回一個(gè)Etag響應(yīng)頭??蛻舳苏?qǐng)求服務(wù)器的時(shí)候會(huì)帶上If-None-Match請(qǐng)求頭字段,該字段的值就是服務(wù)器返回的Etag的值。服務(wù)器接收到請(qǐng)求后會(huì)比較這兩個(gè)值是否一樣,一樣就返回304,讓客戶端從緩存中讀取,不一樣就會(huì)返回新文件給客戶端并更新Etag響應(yīng)頭字段的值。

使用Etag 和 If-None-Match的優(yōu)點(diǎn):

  • 當(dāng)緩存有效時(shí)服務(wù)器不會(huì)返回文件給客戶端,而是直接返回304狀態(tài)碼,讓客戶端從緩存中獲取文件。大大節(jié)省了流量和帶寬以及服務(wù)器的壓力。
  • 并且解決了一秒內(nèi)修改并讀取的問(wèn)題。

擴(kuò)展

緩存失效問(wèn)題

引入了緩存固然是好事,能大大提升響應(yīng)速度以及減輕服務(wù)端的壓力,但是也會(huì)出現(xiàn)一些問(wèn)題,比如我們明明更新了系統(tǒng)版本,為什么客戶端看到的還是老文件。在不同的時(shí)代有不同的解決方案。

老方案

老方案通過(guò)人工自己修改文件名或者在文件名后帶上版本號(hào)、時(shí)間戳,這樣客戶端就會(huì)當(dāng)新文件請(qǐng)求并使用,之前的強(qiáng)緩存就算在有效期內(nèi)也會(huì)失效。