【轉】[譯]理解HTTP/304響應

來源:互聯網
上載者:User

標籤:yun   spec   判斷   並且   form   驗證   使用者   lan   網站   

【轉】[譯]理解HTTP/304響應

原文:http://www.telerik.com/automated-testing-tools/blog/eric-lawrence/12-11-06/understanding-http-304-responses.aspx

剛剛開始使用Fiddler的使用者經常會對Fiddler的網路會話(Web Sessions)列表中的HTTP/304響應感到困惑:

如果用戶端發送的是一個條件驗證(Conditional Validation)請求,則web伺服器可能會返回HTTP/304響應,這就表明了用戶端中所請求資源的緩衝仍然是有效,也就是說該資源從上次緩衝到現在並沒有被修改過.條件請求可以在確保用戶端的資源是最新的同時避免因每次都請求完整資源給伺服器帶來的效能問題.

辨別條件請求

當用戶端緩衝了目標資源但不確定該緩衝資源是否是最新版本的時候,就會發送一個條件請求.在Fiddler中,你可以在Headers Inspector尋找相關要求標頭,這樣就可以辨別出一個請求是否是條件請求.

在進行條件請求時,用戶端會提供給伺服器一個If-Modified-Since要求標頭,其值為伺服器上次返回的Last-Modified回應標頭中的日期值,還會提供一個If-None-Match要求標頭,值為伺服器上次返回的ETag回應標頭的值:

伺服器會讀取到這兩個要求標頭中的值,判斷出用戶端緩衝的資源是否是最新的,如果是的話,伺服器就會返回HTTP/304 Not Modified響應,但沒有響應體.用戶端收到304響應後,就會從緩衝中讀取對應的資源.

另一種情況是,如果伺服器認為用戶端緩衝的資源已經到期了,那麼伺服器就會返回HTTP/200 OK響應,響應體就是該資源當前最新的內容.用戶端收到200響應後,就會用新的響應體覆蓋掉舊的緩衝資源.

只有在用戶端緩衝了對應資源且該資源的回應標頭中包含了Last-ModifiedETag的情況下,才可能發送條件請求.如果這兩個頭都不存在,則必須無條件(unconditionally)請求該資源,伺服器也就必須返回完整的資源資料.

為什麼要使用條件請求

當使用者訪問一個網頁時,條件請求可以加速網頁的開啟時間(因為可以省去傳輸整個響應體的時間),但仍然會有網路延遲,因為瀏覽器還是得為每個資源產生一條條件請求,並且等到伺服器返回HTTP/304響應,才能讀取緩衝來顯示網頁.更理想的情況是,伺服器在響應上指定Cache-Control或Expires指令,這樣用戶端就能知道該資源的可用時間為多長,也就能跳過條件請求的步驟,直接使用緩衝中的資源了.可是,即使伺服器提供了這些資訊,在下列情況下仍然需要使用條件請求:

  • 在超過伺服器指定的到期時間之後
  • 如果使用者執行了重新整理操作的話

在上節給出的圖片中,要求標頭中包含了一個Pragma: no-cache.這是由於使用者使用F5重新整理了網頁.如果使用者按下了CTRL-F5 (有時稱之為“強刷-hard refresh”),你會發現瀏覽器省略了If-Modified-Since和If-None-Match要求標頭,也就是無條件的請求頁面中的每個資源.

避免條件請求

通常來說,緩衝是個好東西.如果你想提高自己網站的訪問速度,緩衝是必須要考慮的.可是在調試的時候,有時候需要阻止緩衝,這樣才能確保你所訪問到的資源是最新的.

你也許會有個疑問:“如果不改變網站內容,我怎麼才能讓Fiddler不返回304而返回一個包含響應體的HTTP/200響應呢?”

你可以在Fiddler中的網路會話(Web Sessions)列表中選擇一條響應為HTTP/304的會話,然後按下U鍵.Fiddler將會無條件重發(Unconditionally reissue)這個請求.然後使用命compare命令對比一下兩個請求有什麼不同,對比結果如下,從中可以得知,Fiddler是通過省略條件要求標頭來實現無緩衝請求的:

如果你想全域阻止HTTP/304響應,可以這麼做:首先清除瀏覽器的緩衝,可以使用Fiddler工具列上的Clear Cache按鈕(僅能清除Internet Explorer緩衝),或者在瀏覽器上按CTRL+SHIFT+DELETE(所有瀏覽器都支援).在清除瀏覽器的緩衝之後,回到Fiddler中,在菜單中選擇Rules > Performance > Disable Caching選項,然後Fiddler就會:刪除所有請求中的條件請求相同的要求標頭以及所有響應中的緩衝時間相關的回應標頭.此外,還會在每個請求中添加Pragma: no-cache要求標頭,在每個響應中添加Cache-Control: no-cache回應標頭,阻止瀏覽器緩衝這些資源.

【轉】[譯]理解HTTP/304響應

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.