http 304狀態(tài)分析
來(lái)源:易賢網(wǎng) 閱讀:865 次 日期:2014-12-29 16:05:30
溫馨提示:易賢網(wǎng)小編為您整理了“http 304狀態(tài)分析”,方便廣大網(wǎng)友查閱!

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)新窗口”、“輸入uri回車(chē)”、“前一頁(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)更多地?cá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)更多地?cá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è)理解.

更多信息請(qǐng)查看IT技術(shù)專欄

更多信息請(qǐng)查看網(wǎng)站運(yùn)營(yíng)
易賢網(wǎng)手機(jī)網(wǎng)站地址:http 304狀態(tài)分析
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門(mén)公布的正式信息和咨詢?yōu)闇?zhǔn)!

2025國(guó)考·省考課程試聽(tīng)報(bào)名

  • 報(bào)班類型
  • 姓名
  • 手機(jī)號(hào)
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎn)要咨詢須知 | 加入群交流 | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:526150442(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)