http狀態碼及相關解釋

2021-06-21 03:02:34 字數 4867 閱讀 3706

本部分餘下的內容會詳細地介紹 http 1.1中的狀態碼。這些狀態碼被分為五大類:

100-199 用於指定客戶端應相應的某些動作。

200-299 用於表示請求成功。

300-399 用於已經移動的檔案並且常被包含在定位頭資訊中指定新的位址資訊。

400-499 用於指出客戶端的錯誤。

500-599 用於支援伺服器錯誤。

httpservletresponse中的常量代表關聯不同標準訊息的狀態碼。在servlet程式中,你會更多地用到這些常量的標識來使用狀態碼。例如:你一般會使用response.setstatus(response.sc_no_content)而不是 response.setstatus(204),因為後者不易理解而且容易導致錯誤。但是,你應當注意到伺服器允許對訊息輕微的改變,而客戶端只注意狀態碼的數字值。所以伺服器可能只返回 http/1.1 200 而不是 http/1.1 200 ok。

100 (continue/繼續)

如果伺服器收到頭資訊中帶有100-continue的請求,這是指客戶端詢問是否可以在後續的請求中傳送附件。在這種情況下,伺服器用 100(sc_continue)允許客戶端繼續或用417 (expectation failed)告訴客戶端不同意接受附件。這個狀態碼是 http 1.1中新加入的。

101 (switching protocols/轉換協議)

101 (sc_switching_protocols)狀態碼是指伺服器將按照其上的頭資訊變為乙個不同的協議。這是 http 1.1中新加入的。

200 (ok/正常)

200 (sc_ok)的意思是一切正常。一般用於相應get和post請求。這個狀態碼對servlet是預設的;如果沒有呼叫setstatus方法的話,就會得到200。

201 (created/已建立)

201 (sc_created)表示伺服器在請求的響應中建立了新文件;應在定位頭資訊中給出它的url。

202 (accepted/接受)

202 (sc_accepted)告訴客戶端請求正在被執行,但還沒有處理完。

203 (non-authoritative information/非官方資訊)

狀態碼203 (sc_non_authoritative_information)是表示文件被正常的返回,但是由於正在使用的是文件副本所以某些響應頭資訊可能不正確。這是 http 1.1中新加入的。

204 (no content/無內容)

在並沒有新文件的情況下,204 (sc_no_content)確保瀏覽器繼續顯示先前的文件。這各狀態碼對於使用者週期性的過載某一頁非常有用,並且你可以確定先前的頁面是否已經更新。

205 (reset content/重置內容)

重置內容205 (sc_reset_content)的意思是雖然沒有新文件但瀏覽器要重置文件顯示。這個狀態碼用於強迫瀏覽器清除表單域。這是 http 1.1中新加入的。

206 (partial content/區域性內容)

206 (sc_partial_content)是在伺服器完成了乙個包含range頭資訊的區域性請求時被傳送的。這是 http 1.1中新加入的。

300 (multiple choices/多重選擇)

300 (sc_multiple_choices)表示被請求的文件可以在多個地方找到,並將在返回的文件中列出來。如果伺服器有首選設定,首選項將會被列於定位響應頭資訊中。

301 (moved permanently)

301 (sc_moved_permanently)狀態是指所請求的文件在別的地方;文件新的url會在定位響應頭資訊中給出。瀏覽器會自動連線到新的url。

302 (found/找到)

與301有些類似,只是定位頭資訊中所給的url應被理解為臨時交換位址而不是永久的。注意:在 http 1.0中,訊息是臨時移動(moved temporarily)的而不是被找到,因此httpservletresponse中的常量是sc_moved_temporarily不是我們以為的sc_found。

注意代表狀態碼302的常量是sc_moved_temporarily而不是sc_found。

狀態碼302是非常有用的因為瀏覽器自動連線在定為響應頭資訊中給出的新url。這非常有用,而且為此有乙個專門的方法——sendredirect。使用response.sendredirect(url)比呼叫 response.setstatus(response.sc_moved_temporarily)和 response.setheader("location", url)多幾個好處。首先,response.sendredirect(url)方法明顯要簡單和容易。第二,servlet自動建立一頁儲存這一連線以提供給那些不能自動轉向的瀏覽器顯示。最後,在servlet 2.2版本(j2ee中的版本)中,sendredirect能夠處理相對路徑,自動轉換為絕對路徑。但是你只能在2.1版本中使用絕對路徑。

如果你將使用者轉向到站點的另一頁中,你要用 httpservletresponse 中的 encodeurl 方法傳送url。這麼做可預防不斷使用基於url重寫的會話跟蹤的情況。url重寫是一種在你的**跟蹤不使用 cookies 的使用者的方法。這是通過在每乙個url尾部附加路徑資訊實現的,但是 servlet 會話跟蹤api會自動的注意這些細節。會話跟蹤在第九章討論,並且養成使用 encodeurl 的習慣會使以後新增會話跟蹤的功能更容易很多。

核心技巧

如果你將使用者轉向到你的站點的其他頁面,用 response.sendredirect(response.encodeurl(url)) 的方式事先計畫好會話跟蹤(session tracking)要比只是呼叫 response.sendredirect(url) 好的多。

303 (see other/參見其他資訊)

這個狀態碼和 301、302 相似,只是如果最初的請求是 post,那麼新文件(在定位頭資訊中給出)藥用 get 找回。這個狀態碼是新加入 http 1.1中的。

304 (not modified/為修正)

當客戶端有乙個快取的文件,通過提供乙個 if-modified-since 頭資訊可指出客戶端只希望文件在指定日期之後有所修改時才會過載此文件,用這種方式可以進行有條件的請求。304 (sc_not_modified)是指緩衝的版本已經被更新並且客戶端應重新整理文件。另外,伺服器將返回請求的文件及狀態碼 200。servlet一般情況下不會直接設定這個狀態碼。它們會實現getlastmodified方法並根據修正日期讓預設服務方法處理有條件的請求。這個方法的例程已在2.8部分(an example using servlet initialization and page modification dates/乙個使用servlet初始化和頁面修正日期的例子)給出。

305 (use proxy/使用**)

305 (sc_use_proxy)表示所請求的文件要通過定位頭資訊中的**伺服器獲得。這個狀態碼是新加入 http 1.1中的。

307 (temporary redirect/臨時重定向)

瀏覽器處理307狀態的規則與302相同。307狀態被加入到 http 1.1中是由於許多瀏覽器在收到302響應時即使是原始訊息為post的情況下仍然執行了錯誤的轉向。只有在收到303響應時才假定瀏覽器會在post請求時重定向。新增這個新的狀態碼的目的很明確:在響應為303時按照get和post請求轉向;而在307響應時則按照get請求轉向而不是post請求。注意:由於某些原因在httpservletresponse中還沒有與這個狀態對應的常量。該狀態碼是新加入http 1.1中的。

注意在 httpservletresponse 中沒有 sc_temporary_redirect 常量,所以你只能顯示的使用307狀態碼。

400 (bad request/錯誤請求)

400 (sc_bad_request)指出客戶端請求中的語法錯誤。

401 (unauthorized/未授權)

401 (sc_unauthorized)表示客戶端在授權頭資訊中沒有有效的身份資訊時訪問受到密碼保護的頁面。這個響應必須包含乙個www- authenticate的授權資訊頭。例如,在本書4.5部分中的「restricting access to web pages./限制訪問web頁。」

403 (forbidden/禁止)

403 (sc_forbidden)的意思是除非擁有授權否則伺服器拒絕提供所請求的資源。這個狀態經常會由於伺服器上的損壞檔案或目錄許可而引起。

404 (not found/未找到)

404 (sc_not_found)狀態每個網路程式設計師可能都遇到過,他告訴客戶端所給的位址無法找到任何資源。它是表示「沒有所訪問頁面」的標準方式。這個狀態碼是常用的響應並且在httpservletresponse類中有專門的方法實現它:senderror("message")。相對於 setstatus使用senderror得好處是:伺服器會自動生成乙個錯誤頁來顯示錯誤資訊。但是,internet explorer 5瀏覽器卻預設忽略你發揮的錯誤頁面並顯示其自定義的錯誤提示頁面,雖然微軟這麼做違反了 http 規範。要關閉此功能,在工具選單裡,選擇internet選項,進入高階標籤頁,並確認「顯示友好的 http 錯誤資訊」選項(在我的瀏覽器中是倒數第8各選項)沒有被選。但是很少有使用者知道此選項,因此這個特性被ie5隱藏了起來使使用者無法看到你所返回給使用者的資訊。而其他主流瀏覽器及ie4都完全的顯示伺服器生成的錯誤提示頁面。可以參考圖6-3及6-4中的例子。

核心警告

預設情況下,ie5忽略服務端生成的錯誤提示頁面。

405 (method not allowed/方法未允許)

405 (sc_method_not_allowed)指出請求方法(get, post, head, put, delete, 等)對某些特定的資源不允許使用。該狀態碼是新加入 http 1.1中的。

406 (not acceptable/無法訪問)

406 (sc_not_acceptable)表示請求資源的mime型別與客戶端中accept頭資訊中指定的類

HTTP狀態碼解釋

1xx 臨時響應 表示臨時響應並需要請求者繼續執行操作的狀態 100 繼續 請求者應當繼續提出請求。伺服器返回此 表示已收到請求的第一部分,正在等待其餘部分。101 切換協議 請求者已要求伺服器切換協議,伺服器已確認並準備切換。2xx 成功 表示成功處理了請求的狀態 200 成功 伺服器已成功處理了...

http狀態碼解釋及可能原因

訊息類 1字頭 成功類 2字頭 重定向類 3字頭 請求錯誤類 4字頭 伺服器錯誤類 5 6字頭 狀態 400 bad request 解釋 請求header或 cookie 所包含的資訊過多 狀態 403 forbidden 解釋 對路由檔案或目錄沒有訪問許可權 狀態 404 not found 解...

HTTP的版本號,狀態碼,及解釋狀態碼

客戶方錯誤 100 繼續 101 交換協議 成功 200 ok 201 已建立 202 接收 203 非認證資訊 204 無內容 205 重置內容 206 部分內容 重定向 300 多路選擇 301 永久轉移 302 暫時轉移 303 參見其它 304 未修改 not modified 305 使用...