http協議之快取

2021-06-28 06:38:52 字數 2211 閱讀 7213

http協議快取控制

第一次請求時200 ok

第二次請求304 not modified 為修改狀態

解釋: 在網路上有一些快取伺服器,另外瀏覽器自身也有快取功能。

基於乙個前提-不會經常改動,伺服器在返回200的時候,還返回該的」簽名「 -- etag (簽名可以理解為的「指紋」)

當瀏覽器再次訪問該時,去伺服器校驗「指紋」

如果沒有變化,直接使用快取中的,這樣減輕了伺服器負擔

抓包觀察:

第一次請求:

etag:"321397979879-fndlsh32yfsh894392"

last-modified:  tue, 10 jun 2018 12:12:12 gmt

第二次請求頭:

第二次請求頭裡面:

if-modified-since:    tue, 10 jun 2018 12:12:12 gmt

如果自tue, 10 jun 2018 12:12:12 gmt這個時間後沒有修改則不會重新請求,如果有修改則會重新請求

if-none-match:  "321397979879-fndlsh32yfsh894392"

如果該最新的etag值 和 if-none-match 的值不匹配,則重新請求

第二次響應頭:

status code 304 not modified

如果是304就以為這瀏覽器從本地的快取中取資料,節省了在網路上傳輸的時間

大**的快取:

如果**比較大,有n臺快取伺服器,那麼這n臺快取伺服器如何處理主伺服器上的檔案?

要不要快取?

如果快取該快取多久呢?

快取伺服器與主伺服器之間應該有一些協議,來說明這2個問題

用什麼協議來說明這兩個問題?

答:還是http協議,用頭資訊,cache-control 來控制

利用協議控制快取(apache伺服器):

利用協議控制快取:相關模組是---mod_expires

expiresactive on

expiresbytype image/jpeg 'access plus 1 month'

控制是否快取以及快取週期

在.htaccess中,具體語法如下:

expiresdefault "[plus] {}*"

expiresbytype type/encoding "[plus] {}*"

expiresdefault 是設定預設的快取引數

expiresbytype 是按照檔案型別來設計獨特的快取引數

我們用第二種來做測試給jpg設定乙個月的生存週期

後面4個引數怎麼理解?

base: 基於哪個時間點來計算快取有效期

access/now: 基於請求響應的那一瞬間,比如從此瞬間到乙個月之後

modification: 基於被請求檔案的最後修改日期來計算,比如最後修改日期的後一周內仍然有效

num: 快取時間的大小 (30)

type: 快取時間的單位 (天)

例項:如果這是在集群環境裡,快取伺服器得到此,將會認為乙個月內有效,從而減輕了主伺服器的負擔

利用協議取消快取(apache伺服器):

如果有些資訊不要快取,必須要去主伺服器獲取,那麼要這樣

客戶端:

cache-control:no-cache

pragma:no-cache

伺服器端清除快取:相關模組是:mod_header

cache-control:no-cache

header unset etag

header unset last-modified

revalidate:使重新生效,使從新有法律效力

多次重新整理瀏覽器請求效果gif會始終都請求, jpeg 的會有快取

HTTP 協議快取機制

瀏覽器 http 協議快取機制詳解 收藏 xrzs 破譯 粽 子 拿最高懸賞!最近在準備優化日誌請求時遇到了一些令人疑惑的問題,比如為什麼響應頭里出現了兩個 cache control 為什麼明明設定了 no cache 卻還是發請求,為什麼多次訪問時有時請求裡帶了 etag,有時又沒有帶?等等。後...

HTTP協議的快取

http的快取主要是通過請求和相應報文頭部的幾個欄位來控制快取的。也就是cache control後面的字段 快取未更改的資源 etag頭的乙個典型用例是快取未更改的資源。如果使用者再次訪問給定的url 設有etag欄位 顯示資源過期了且不可用,客戶端就傳送值為etag的if none matchh...

http協議的快取

1.cache control response.setheader cache control public,max age 360 首先判斷快取的相對時間,如果還未超過時間,則不發起請求,直接從cache中讀取。反之,則重新請求。2.expires response.setheader expi...