http 304響應的理解

2021-08-21 09:05:37 字數 2194 閱讀 8882

我們經常會看到請求位址中狀態存在304、200

如果客戶端(瀏覽器)傳送的是乙個

條件驗證請求

,則web伺服器可能會返回304響應,這就表明了客戶端中所請求資源的快取仍然是有效的,也就是說該資源從上次快取到現在沒有被修改過,瀏覽器會自動識別並讀取快取中的檔案來顯示

在進行條件請求時,一般請求頭會帶上  

if-modified-since、if-none-match,這兩個值分別對應響應頭last-modified、etag返回的值

伺服器會讀取到這兩個請求頭中的值,判斷出客戶端快取的資源是否是最新的,如果是的話,伺服器就會返回304 not modified響應,客戶端收到304響應後,就會從快取中讀取對應的資源.

另一種情況是,如果伺服器認為客戶端快取的資源已經過期了,那麼伺服器就會返回200 ok響應,響應體就是該資源當前最新的內容.客戶端收到200響應後,就會用新的資源覆蓋掉舊的快取資源.

只有在客戶端快取了對應資源且該資源的響應頭中包含了last-modified或etag的情況下,才可能傳送條件請求.如果這兩個頭都不存在,則必須無條件請求該資源,伺服器也就必須返回完整的資源資料.

當使用者訪問乙個網頁時,條件請求可以加速網頁的開啟時間(因為可以省去傳輸整個響應體的時間),但仍然會有網路延遲,因為瀏覽器還是得為每個資源生成一條條件請求,並且等到伺服器返回304響應,才能讀取快取來顯示網頁.更理想的情況是,伺服器在響應上指定cache-control或expires指令,這樣客戶端就能知道該資源的可用時間為多長,也就能跳過條件請求的步驟,直接使用快取中的資源了.可是,即使伺服器提供了這些資訊,在下列情況下仍然需要使用條件請求:

瀏覽器快取機制

第一步:  當前快取是否過期?           第二:  伺服器中的檔案是否有改動?

200狀態

304狀態

------ (當expires和cache-control失效的時候)或者(f5重新整理),瀏覽器就會傳送請求給伺服器,如果沒有變化,則返回304

200狀態(from cache)

------ 當

expires(絕對時間)和  cache-control(相對時間)有效

的時候,瀏覽器訪問自己的快取,cache-control優先順序比expires高

主要的方式有兩種,這兩種都是設定請求頭中的某乙個欄位來實現的:1、expires;2、cache-control。cache-control設定後優先順序比expires高,先說下通過cache-control來控制快取。

cache-control:max-age =86400;如果在請求頭中設定了

那麼在86400s內,如果再去請求這個檔案的話,是不會發起請求的。因為還沒有過期呢!唯一例外是如果這個檔案是你在瀏覽器位址列輸入的位址來請求的(比如你請求當你重新整理的時候就會讓當前的這個檔案所設定的過期時間失效,直接去請求伺服器來看是返回個304還是返回新檔案。一般這麼請求的都是我們常說的入口檔案(例如index.html),入口檔案一重新整理就會重新向伺服器請求,但是入口檔案裡面所引入的檔案如js,css等不會隨著重新整理而另過期時間失效。除非你單找出來那個引入鏈結,通過瀏覽器位址列去查詢它並重新整理

常用的方式為etag(一般是檔案的md5值)和last-modified,思路上差不多,這裡只介紹last-modified的用法。

last-modified方式需要用到兩個字段:last-modified 和 if-modified-since。

先來看下這兩個欄位的形式:

當第一次請求某乙個檔案的時候,就會傳遞回來乙個last-modified 字段,其內容是這個檔案的修改時間。當這個檔案快取過期,瀏覽器又向伺服器請求這個檔案的時候,會自動帶乙個請求頭欄位if-modified-since,其值是上一次傳遞過來的last-modified的值,拿這個值去和伺服器中現在這個檔案的最後修改時間做對比,如果相等,那麼就不會重新拉取這個檔案了,返回304讓瀏覽器讀過期快取。如果不相等就重新拉取。

理解HTTP 304響應

剛剛開始使用fiddler的使用者經常會對fiddler的網路會話 web sessions 列表中的http 304響應感到困惑 如果客戶端傳送的是乙個條件驗證 conditional validation 請求,則web伺服器可能會返回http 304響應,這就表明了客戶端中所請求資源的快取仍然...

理解HTTP 304響應

原文 剛剛開始使用fiddler的使用者經常會對fiddler的網路會話 web sessions 列表中的http 304響應感到困惑 如果客戶端傳送的是乙個條件驗證 conditional validation 請求,則web伺服器可能會返回http 304響應,這就表明了客戶端中所請求資源的快...

理解http304響應

一 什麼是304 先看一下304解釋 更詳細一點,我們可以這麼理解 1 如果客戶端在請求乙個檔案的時候,發現自己快取的檔案有 last modified 那麼在請求中會包含 if modified since 這個時間就是快取檔案的 last modified 因此,如果請求中包含 if modif...