HTTP 出現304情況及詳解

2021-09-24 13:20:50 字數 737 閱讀 9765

大致說來304狀態碼或許不應該認為是一種錯誤,而是對客戶端有快取情況下服務端的一種響應。

客戶端在請求乙個檔案的時候,發現自己快取的檔案有 last modified ,那麼在請求中會包含 if modified since ,這個時間就是快取檔案的 last modified 。因此,如果請求中包含 if modified since,就說明已經有快取在客戶端。服務端只要判斷這個時間和當前請求的檔案的修改時間就可以確定是返回 304 還是 200 。

對於靜態檔案,例如:css、,伺服器會自動完成 last modified 和 if modified since 的比較,完成快取或者更新。但是對於動態頁面,就是動態產生的頁面,往往沒有包含 last modified 資訊,這樣瀏覽器、閘道器等都不會做快取,也就是在每次請求的時候都完成乙個 200 的請求。

因此,對於動態頁面做快取加速,首先要在 response 的 http header 中增加 last modified 定義,其次根據 request 中的 if modified since 和被請求內容的更新時間來返回 200 或者 304 。雖然在返回 304 的時候已經做了一次資料庫查詢,但是可以避免接下來更多的資料庫查詢,並且沒有返回頁面內容而只是乙個 http header,從而大大的降低頻寬的消耗,對於使用者的感覺也是提高。當這些快取有效的時候,通過 fiddler 或httpwatch 檢視乙個請求會得到這樣的結果:

第一次訪問 200

按f5重新整理(第二次訪問) 304

按ctrl+

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