你知道HTTP狀態代碼204和304的區別麼?

來源:互聯網
上載者:User

 

    在搜尋引擎中輸入“HTTP狀態代碼”,或者輸入“http status code”,可以找到詳盡的資料。但是,這些資料大都是描述了狀態代碼的定義,至於技術上的微妙之處,只能是靠自己摸索了吧。

 

204和304的區別,直接告訴大家答案,還是先賣個關子呢?知道答案的看到這裡可以離開了,不知道答案的如果著急,可以直接跳到最後。如果還有些興趣,那就跟我一步步來吧,這樣記憶會更長久一些。

 

204和304的定義,簡單描述如下:

204 No Content304 Not Modified

 

顧名思義倒是能看出一些端倪。但是,無論是英文還是中文,204的補充說明很有誤導性:

If the client is a user agent, it SHOULD NOT change its document view.在並沒有新文檔的情況下,204 (SC_NO_CONTENT)確保瀏覽器繼續顯示先前的文檔。

 

在真相大白之前,還是先看看我遇到的問題吧。

 

現象:

   網頁使用了jQuery。本機IE10開啟頁面沒有問題。兩位同事的IE10開啟頁面報$函數不存在錯誤。 

分析:

兩位同事的IE10對兩個頁面中相同來源的javascript檔案,只執行一遍。開啟第一個頁面能夠正常顯示,開啟第二個頁面則報$函數不存在錯誤。

錯誤的解決方式:

恢複IE預設配置,如所示:

650) this.width=650;" title="ie10.png" src="http://img1.51cto.com/attachment/201307/105146285.png" />

正確的解決方式:

注意到這個網站在輸出內容之前有這麼一個邏輯

if(resultText.equals("")){httpServletResponse.setStatus(204);}

正確的做法是把整個if語句全部注掉。瀏覽器的配置是“自動”還是“每次訪問網頁時”,都行。錯誤現象中“本機IE10開啟頁面沒有問題”是個誤導,只要操作“得當”,問題在本機也是可以再現的。

 

真相,204和304的區別:

 在本例中,204的同時返回了空檔案,這個空檔案要替換上次緩衝的檔案。這樣第一次開啟頁面擷取jQuery代碼是正確的,頁面正常顯示;第二次開啟頁面時詢問是否要更新,結果返回了空檔案,這個空檔案成為了新的緩衝,然後錯誤現象看起來就像是jQuery沒有載入,而且以後也不會再“載入”了,因為檔案是空的拿什麼載入?注釋掉那個httpServletResponse.setStatus(204)的程式指令,Web伺服器就自動返回304了,304的意思是還用上次的緩衝,這樣就不會有空檔案的問題,所以頁面正常顯示。這就解釋了為什麼當出現問題時清空緩衝有用,也不難理解為什麼“每次從伺服器重新整理”更有用。因為瀏覽器安裝的預設配置就是有緩衝機制的,我們要求每個使用者去修改他們的配置不現實,所以倘若不能夠正確地理解到204和304的微妙區別,便不能剷除錯誤的根源,留下一個陰影在那裡微笑。

 

本文出自 “iData” 部落格,請務必保留此出處http://idata.blog.51cto.com/4581576/1261569

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.