理解HTTP 304響應

2021-07-15 03:45:57 字數 2108 閱讀 6246

原文:剛剛開始使用fiddler的使用者經常會對fiddler的網路會話(web sessions)列表中的http/304響應感到困惑:

如果客戶端傳送的是乙個條件驗證(conditional validation)請求,則web伺服器可能會返回http/304響應,這就表明了客戶端中所請求資源的快取仍然是有效的,也就是說該資源從上次快取到現在並沒有被修改過.條件請求可以在確保客戶端的資源是最新的同時避免因每次都請求完整資源給伺服器帶來的效能問題.

當客戶端快取了目標資源但不確定該快取資源是否是最新版本的時候,就會傳送乙個條件請求.在fiddler中,你可以在headers inspector查詢相關請求頭,這樣就可以辨別出乙個請求是否是條件請求.

在進行條件請求時,客戶端會提供給伺服器乙個if-modified-since請求頭,其值為伺服器上次返回的last-modified響應頭中的日期值,還會提供乙個if-none-match請求頭,值為伺服器上次返回的etag響應頭的值:

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

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

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

)請求該資源,伺服器也就必須返回完整的資源資料.

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

在上節給出的中,請求頭中包含了乙個pragma: no-cache.這是由於使用者使用f5重新整理了網頁.如果使用者按下了ctrl-f5 (有時稱之為「強刷-hard refresh」),你會發現瀏覽器省略了if-modified-since和if-none-match請求頭,也就是無條件的請求頁面中的每個資源.

通常來說,快取是個好東西.如果你想提高自己**的訪問速度,快取是必須要考慮的.可是在除錯的時候,有時候需要阻止快取,這樣才能確保你所訪問到的資源是最新的.

你也許會有個疑問:「如果不改變**內容,我怎麼才能讓fiddler不返回304而返回乙個包含響應體的http/200響應呢?」

你可以在fiddler中的網路會話(web sessions)列表中選擇一條響應為http/304的會話,然後按下u鍵.fiddler將會無條件重發(unconditionally reissue)這個請求.然後使用命compare命令對比一下兩個請求有什麼不同,對比結果如下,從中可以得知,fiddler是通過省略條件請求頭來實現無快取請求的:

如果你想全域性阻止http/304響應,可以這麼做:首先清除瀏覽器的快取,可以使用fiddler工具欄上的clear cache按鈕(僅能清除internet explorer快取),或者在瀏覽器上按ctrl+shift+delete(所有瀏覽器都支援).在清除瀏覽器的快取之後,回到fiddler中,在選單中選擇rules > performance > disable caching選項,然後fiddler就會:刪除所有請求中的條件請求相同的請求頭以及所有響應中的快取時間相關的響應頭.此外,還會在每個請求中新增pragma: no-cache請求頭,在每個響應中新增cache-control: no-cache響應頭,阻止瀏覽器快取這些資源.

理解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...

譯 理解HTTP 304響應

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