對 HTTP 304 的理解

2022-03-25 16:28:16 字數 940 閱讀 8212

最近和同事一起看web的cache問題,又進一步理解了 http 中的 304 又有了一些了解。 304 的標準解釋是:

not modified 客戶端有緩衝的文件並發出了乙個條件性的請求(一般是提供if-modified-since頭表示客戶只想比指定日期更新的文件)。伺服器告訴客戶,原來緩衝的文件還可以繼續使用。
如果客戶端在請求乙個檔案的時候,發現自己快取的檔案有 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,從而大大的降低頻寬的消耗,對於使用者的感覺也是提高。

當這些快取有效的時候,通過 httpwatch檢視乙個請求會得到這樣的結果:

第一次訪問 200

滑鼠點選二次訪問 (cache)

按f5重新整理 304

按ctrl+f5強制重新整理 200

如果是這樣的就說明快取真正有效了。以上就是我對 http 304 的乙個理解。

對 HTTP 304 的理解

最近和同事一起看web的cache問題,又進一步理解了 http 中的 304 又有了一些了解。304 的標準解釋是 not modified 客戶端有緩衝的文件並發出了乙個條件性的請求 一般是提供if modified since頭表示客戶只想比指定日期更新的文件 伺服器告訴客戶,原來緩衝的文件還...

理解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響應,這就表明了客戶端中所請求資源的快...