濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > HTTP 304狀態(tài)分析

HTTP 304狀態(tài)分析

熱門標(biāo)簽:高德停車位地圖標(biāo)注點(diǎn) 地圖標(biāo)注地址怎么改店 成都米蘭400的電話 如何申請(qǐng) 常州手機(jī)外呼系統(tǒng)開(kāi)發(fā) 臨汾電腦外呼系統(tǒng)平臺(tái) 電銷機(jī)器人怎么做 外呼系統(tǒng)為什么不好做了 天津營(yíng)銷外呼系統(tǒng)加盟 撒哈拉沙漠地圖標(biāo)注app
HTTP 304: Not Modified
標(biāo)準(zhǔn)解釋是:Not Modified 客戶端有緩沖的文檔并發(fā)出了一個(gè)條件性的請(qǐng)求(一般是提供If-Modified-Since頭表示客戶只想比指定日期更新的文檔)。服務(wù)器告訴客戶,原來(lái)緩沖的文檔還可以繼續(xù)使用。

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

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

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

可以使用HttpWatch
第一次訪問(wèn) 200
鼠標(biāo)點(diǎn)擊二次訪問(wèn) (Cache)
按F5刷新 304
按Ctrl+F5強(qiáng)制刷新 200
如果是這樣的就說(shuō)明緩存真正有效了。

對(duì) HTTP 304 的理解

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

第一次訪問(wèn) 200
鼠標(biāo)點(diǎn)擊二次訪問(wèn) (Cache)
按F5刷新 304
按Ctrl+F5強(qiáng)制刷新 200
如果是這樣的就說(shuō)明緩存真正有效了。以上就是我對(duì) HTTP 304 的一個(gè)理解。

標(biāo)簽:湖北 銅陵 安順 南京 新余 揚(yáng)州 包頭

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《HTTP 304狀態(tài)分析》,本文關(guān)鍵詞  HTTP,304,狀態(tài),分析,HTTP,304,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《HTTP 304狀態(tài)分析》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于HTTP 304狀態(tài)分析的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    太原市| 宝应县| 新干县| 灌南县| 阿坝| 都安| 古交市| 梓潼县| 修武县| 青冈县| 贵德县| 松江区| 商河县| 柳江县| 上栗县| 辽阳县| 榆林市| 大悟县| 巍山| 乐平市| 岑溪市| 南召县| 漯河市| 增城市| 马尔康县| 濮阳县| 黄浦区| 龙南县| 改则县| 获嘉县| 巴彦淖尔市| 丹巴县| 米脂县| 韶关市| 漳平市| 雷波县| 米脂县| 扬中市| 武功县| 临夏县| 宜昌市|