新聞中心
緩存是指代理服務(wù)器或客戶端本地磁盤內(nèi)保存的資源副本,利用緩存可減少對源服務(wù)器的訪問,節(jié)省通信流量和通信時間。

沙縣網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),沙縣網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為沙縣上千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)要多少錢,請找那個售后服務(wù)好的沙縣做網(wǎng)站的公司定做!
瀏覽器緩存指的就是瀏覽器對之前請求過的文件進(jìn)行緩存,以便在下一次訪問時重復(fù)使用,從而節(jié)省帶寬、提升訪問速度、降低服務(wù)器壓力。
今天所說的HTTP緩存機(jī)制就是利用HTTP響應(yīng)頭將所請求的資源在瀏覽器中進(jìn)行緩存,緩存方式主要分為兩種:強(qiáng)緩存、協(xié)商緩存。
3.1 強(qiáng)緩存
強(qiáng)緩存指的是在緩存時間內(nèi)不會向服務(wù)器發(fā)起請求,只有過期之后才會向服務(wù)器發(fā)起請求,整個流程如下所示:
HTTP中存在兩個響應(yīng)頭來表征強(qiáng)緩存,分別是:Expires、Cache-Control,下面對這兩個字段進(jìn)行闡述。
3.1.1 Expires
Expires是HTTP1.0中的字段,是一個絕對時間,即服務(wù)器時間。瀏覽器檢查當(dāng)前時間,如果還沒到失效時間就直接使用緩存文件。
3.1.2 Cache-Control
由于Expires存在服務(wù)器時間越客戶端時間不一致的問題,所以HTTP1.1中新增了Cache-Control字段(注意:如果同時存在cache-control和expires時,瀏覽器總是優(yōu)先使用cache-control),通過設(shè)置max-age來不存一個相對時間,表示其在該相對時間內(nèi)容有效。對于Cache-Control字段的常見取值如下所示:
- private:默認(rèn)值,表示客戶端可以緩存,中間代理、CDN等不能緩存此響應(yīng);
- public:表示客戶端和代理服務(wù)器都可緩存;
- max-age=xxx:緩存的內(nèi)容將在xxx秒后失效;
- no-cache:需要使用協(xié)商緩存來驗(yàn)證緩存數(shù)據(jù);
- no-store:所有內(nèi)容都不會緩存(包括協(xié)商緩存),每次都向服務(wù)器請求最新資源;
- must-revalidate:在緩存過期前可以使用,過期后必須向服務(wù)器驗(yàn)證。
3.1.3 為什么增加Cache-Control字段?
Expires字段存在一個問題,即該字段利用的是絕對時間,由于服務(wù)器時間與客戶端時間可能不一致,從而導(dǎo)致問題,所以新增了Cache-Control字段。
3.2 協(xié)商緩存
協(xié)商緩存都會向服務(wù)器發(fā)送請求,判斷緩存數(shù)據(jù)是否過期,過期的話會返回新的內(nèi)容,沒有過期則使用本地的緩存數(shù)據(jù)。對于協(xié)商緩存主要利用兩個字段:Last-Modify、Etag,其整體流程如下所示:
注:圖片來源于(https://www.cnblogs.com/zhouwenhong/p/3928645.html)
3.2.1 Last-Modify
last-modified是HTTP1.0中的字段,是第一次請求資源時,服務(wù)器返回的字段,表示最后一次更新的時間。下一次瀏覽器請求資源時就發(fā)送if-modified-since字段。服務(wù)器用本地Last-modified時間與if-modified-since時間比較,如果不一致則認(rèn)為緩存已過期并返回新資源給瀏覽器;如果時間一致則發(fā)送304狀態(tài)碼,讓瀏覽器繼續(xù)使用緩存。
3.2.2 Etag
Etag是HTTP1.1中新增的字段,是資源的實(shí)體標(biāo)識(哈希字符串),當(dāng)資源內(nèi)容更新時,Etag會改變。服務(wù)器會判斷Etag是否發(fā)生變化,如果變化則返回新資源,否則返回304。
3.2.3 為什么增加Etag字段?
在Last-Modify字段存在情況下又新增Etag字段的理由主要有以下幾點(diǎn):
- 一些文件進(jìn)行更改后,其內(nèi)容并沒有發(fā)生變化,僅僅影響了修改時間,這時候不應(yīng)該認(rèn)為緩存過期了;
- 某些文件修改太多頻繁(秒級別以內(nèi)),但是If-Modify-Since能檢查的精度是秒級別,此時會導(dǎo)致問題;
- 某些服務(wù)器并不能精確得到文件的最后修改時間。
本文轉(zhuǎn)載自微信公眾號「執(zhí)鳶者」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系執(zhí)鳶者公眾號。
名稱欄目:前端百題斬之一文了解HTTP緩存
本文地址:http://www.dlmjj.cn/article/dpijjee.html


咨詢
建站咨詢
