佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > HTTP 304狀態(tài)分析

HTTP 304狀態(tài)分析

熱門標簽:鐵路電話系統(tǒng) 百度競價排名 服務外包 Linux服務器 網(wǎng)站排名優(yōu)化 地方門戶網(wǎng)站 呼叫中心市場需求 AI電銷
HTTP 304: Not Modified
標準解釋是:Not Modified 客戶端有緩沖的文檔并發(fā)出了一個條件性的請求(一般是提供If-Modified-Since頭表示客戶只想比指定日期更新的文檔)。服務器告訴客戶,原來緩沖的文檔還可以繼續(xù)使用。

我們先來看下瀏覽器的工作原理:
(1)直接在緩存中去獲取內容。如果先前有效訪問的響應頭包含 Expires, max-age的話,“打開新窗口”、“輸入URI回車”、“前一頁”、“后一頁”這些瀏覽器行為不會使瀏覽器在Expires, max-age設置的有效期時間內去訪問服務器,而是在緩存中去獲取內容,但是"刷新'"或"重載"例外。
(2)訪問服務器,根據(jù)服務器響應來獲取內容。這種情況發(fā)生在設置no-cache等頭標要求不緩存,或者是設置了 Expires,max-age但瀏覽器行為是“刷新”或“重載”時候。'Last-Modified'、'ETag'、'must-revalidate' 等有些特殊,不直接受瀏覽器行為影響,它們必須訪問服務器后,再由服務器判斷是直接發(fā)送新的資源,還是發(fā)送一個304 Not Modfied讓瀏覽器使用緩存中的資源。

如果客戶端在請求一個文件的時候,發(fā)現(xiàn)自己緩存的文件有 Last Modified ,那么在請求中會包含 If Modified Since ,這個時間就是緩存文件的 Last Modified 。因此,如果請求中包含 If Modified Since,就說明已經(jīng)有緩存在客戶端。只要判斷這個時間和當前請求的文件的修改時間就可以確定是返回 304 還是 200 。對于靜態(tài)文件,例如:CSS、圖片,服務器會自動完成 Last Modified 和 If Modified Since 的比較,完成緩存或者更新。但是對于動態(tài)頁面,就是動態(tài)產(chǎn)生的頁面,往往沒有包含 Last Modified 信息,這樣瀏覽器、網(wǎng)關等都不會做緩存,也就是在每次請求的時候都完成一個 200 的請求。
因此,對于動態(tài)頁面做緩存加速,首先要在 Response 的 HTTP Header 中增加 Last Modified 定義,其次根據(jù) Request 中的 If Modified Since 和被請求內容的更新時間來返回 200 或者 304 。雖然在返回 304 的時候已經(jīng)做了一次數(shù)據(jù)庫查詢,但是可以避免接下來更多的數(shù)據(jù)庫查詢,并且沒有返回頁面內容而只是一個 HTTP Header,從而大大的降低帶寬的消耗,對于用戶的感覺也是提高。

如何測試HTTP狀態(tài),緩存是否有效?

可以使用HttpWatch
第一次訪問 200
鼠標點擊二次訪問 (Cache)
按F5刷新 304
按Ctrl+F5強制刷新 200
如果是這樣的就說明緩存真正有效了。

對 HTTP 304 的理解

最近和同事一起看Web的Cache問題,又進一步理解了 HTTP 中的 304 又有了一些了解。
304 的標準解釋是:Not Modified 客戶端有緩沖的文檔并發(fā)出了一個條件性的請求(一般是提供If-Modified-Since頭表示客戶只想比指定日期更新的文檔)。服務器告訴客戶,原來緩沖的文檔還可以繼續(xù)使用。
如 果客戶端在請求一個文件的時候,發(fā)現(xiàn)自己緩存的文件有 Last Modified ,那么在請求中會包含 If Modified Since ,這個時間就是緩存文件的 Last Modified 。因此,如果請求中包含 If Modified Since,就說明已經(jīng)有緩存在客戶端。只要判斷這個時間和當前請求的文件的修改時間就可以確定是返回 304 還是 200 。對于靜態(tài)文件,例如:CSS、圖片,服務器會自動完成 Last Modified 和 If Modified Since 的比較,完成緩存或者更新。但是對于動態(tài)頁面,就是動態(tài)產(chǎn)生的頁面,往往沒有包含 Last Modified 信息,這樣瀏覽器、網(wǎng)關等都不會做緩存,也就是在每次請求的時候都完成一個 200 的請求。
因此,對于動態(tài)頁面做緩存加速,首先要在 Response 的 HTTP Header 中增加 Last Modified 定義,其次根據(jù) Request 中的 If Modified Since 和被請求內容的更新時間來返回 200 或者 304 。雖然在返回 304 的時候已經(jīng)做了一次數(shù)據(jù)庫查詢,但是可以避免接下來更多的數(shù)據(jù)庫查詢,并且沒有返回頁面內容而只是一個 HTTP Header,從而大大的降低帶寬的消耗,對于用戶的感覺也是提高。
當這些緩存有效的時候,通過 HttpWatch 查看一個請求會得到這樣的結果:

第一次訪問 200
鼠標點擊二次訪問 (Cache)
按F5刷新 304
按Ctrl+F5強制刷新 200
如果是這樣的就說明緩存真正有效了。以上就是我對 HTTP 304 的一個理解。

標簽:崇左 衡水 銅川 湖南 黃山 仙桃 蘭州 湘潭

巨人網(wǎng)絡通訊聲明:本文標題《HTTP 304狀態(tài)分析》,本文關鍵詞  ;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    百色市| 突泉县| 偏关县| 清新县| 汝城县| 行唐县| 安化县| 北流市| 黄山市| 甘泉县| 施甸县| 寿光市| 西乌| 葫芦岛市| 同心县| 绥芬河市| 贵德县| 黑龙江省| 蒙自县| 海兴县| 河间市| 多伦县| 马鞍山市| 莒南县| 绥宁县| 盐城市| 南安市| 鹰潭市| 花莲市| 精河县| 祁阳县| 陵川县| 洪江市| 五寨县| 昌邑市| 甘谷县| 宜兴市| 大英县| 铜梁县| 宜川县| 大姚县|