HTTP狀態碼

前兩天,在豆瓣上看到一個講解HTTP狀態碼的文章,覺得很搞笑。雖說我也是搞IT的,也經常見到服務器返回的各種HTTP狀態碼,但是真沒認真去了解過這個東東。藉此機會,我也蒐集了一下HTTP狀態碼的相關資料,和大家分享一下。

  HTTP狀態碼(HTTP Status Code)是用以表示網頁服務器HTTP響應狀態的3位數字代碼。它由 RFC2616 規範定義的,並得到RFC2518、RFC2817、RFC2295、RFC2774、RFC2918等規範擴展。

  HTTP狀態碼一共分爲五類。狀態碼的第一個數字代表了響應的五種狀態之一。分類如下:

HTTP狀態碼分類
分類含義
1XX表示消息。這一類型的狀態碼,代表請求已被接受,需要繼續處理。這類響應是臨時響應,只包含狀態行和某些可選的響應頭信息,並以空行結束。
2XX表示成功。這一類型的狀態碼,代表請求已成功被服務器接收、理解、並接受。
3XX表示重定向。這類狀態碼代表需要客戶端採取進一步的操作才能完成請求。通常,這些狀態碼用來重定向,後續的請求地址(重定向目標)在本次響應的Location域中指明。
4XX表示請求錯誤。這類的狀態碼代表了客戶端看起來可能發生了錯誤,妨礙了服務器的處理。除非響應的是一個HEAD請求,否則服務器就應該返回一個解釋當前錯誤狀況的實體,以及這是臨時的還是永久性的狀況。這些狀態碼適用於任何請求方法。瀏覽器應當向用戶顯示任何包含在此類錯誤響應中的實體內容。
5XX表示服務器錯誤。這類狀態碼代表了服務器在處理請求的過程中有錯誤或者異常狀態發生,也有可能是服務器意識到以當前的軟硬件資源無法完成對請求的處理。除非這是一個HEAD請求,否則服務器應當包含一個解釋當前錯誤狀態以及這個狀況是臨時的還是永久的解釋信息實體。瀏覽器應當向用戶展示任何在當前響應中被包含的實體。

  下面,我們就開始趣解HTTP狀態碼。(少兒不宜,十八歲以下禁止觀看啊。哈哈…)


趣解HTTP狀態碼
狀態碼英/中雙解漢語解釋趣解
1XX—表示消息。這一類型的狀態碼,代表請求已被接受,需要繼續處理。
100Continue/繼續客戶端應當繼續發送請求。人家… 還要…
101Switching Protocols/轉換協議服務器已經理解了客戶端的請求,並將通過Upgrade消息頭通知客戶端採用不同的協議來完成這個請求。服務姬傲嬌中
102Processing由WebDAV(RFC 2518)擴展的狀態碼,代表處理將被繼續執行。造人中…
2XX—表示成功。代表請求已成功被服務器接收、理解、並接受。
200OK/正常請求已成功,請求所希望的響應頭或數據體將隨此響應返回。歡迎回來, 主人
201Created/已創建表示服務器在請求的響應中建立了新文檔;應在定位頭信息中給出它的URL。
202Accepted/接受服務器已接受請求,但尚未處理完。
203Non-Authoritative Information/非官方信息表示文檔被正常的返回,但是由於正在使用的是文檔副本所以某些響應頭信息可能不正確。俺是小三
204No Content/無內容表示服務器成功處理了請求,但不需要返回任何實體內容,並且希望返回更新了的元信息。在並沒有新文檔的情況下,確保瀏覽器繼續顯示先前的文檔。小姐呢?!怎麼沒有?
205Reset Content/重置內容意思是雖然沒有新文檔但瀏覽器要重置文檔顯示。這個狀態碼用於強迫瀏覽器清除表單域。先生,給你換個小姐?
206Partial Content/局部內容該請求必須包含Range頭信息來指示客戶端希望得到的內容範圍,並且可能包含If-Range來作爲請求條件。
207Multi-Status/多種狀態由WebDAV(RFC 2518)擴展的狀態碼,代表之後的消息體將是一個XML消息,並且可能依照之前子請求數量的不同,包含一系列獨立的響應代碼。搞個NP。嘿嘿…
3xx—表示重定向。代表需要客戶端採取進一步的操作才能完成請求。
300Multiple Choices/多重選擇表示被請求的文檔可以在多個地方找到,並將在返回的文檔中列出來。先生,請點菜。
301Moved Permanently/永久遷移指所請求的文檔在別的地方;文檔新的URL會在定位響應頭信息中給出。瀏覽器會自動連接到新的URL。人家搬家了
302Found/找到與301有些類似,只是定位頭信息中所給的URL應被理解爲臨時交換地址而不是永久的。親,先等下啦,人家先去洗白白嘛。。。
303See Other/參見其他信息和 301、302 相似,只是如果最初的請求是 POST,那麼新文檔(在定位頭信息中給出)藥用 GET 找回。
304Not Modified/沒有修改如果客戶端發送了一個帶條件的GET請求且該請求已被允許,而文檔的內容(自上次訪問以來或者根據請求的條件)並沒有改變,則服務器應當返回這個狀態碼。304響應禁止包含消息體,因此始終以消息頭後的第一個空行結尾。好久不見,還是風味猶存啊。
305Use Proxy/使用代理表示所請求的文檔要通過定位頭信息中的代理服務器獲得。泡妞是需要拉皮條的。
306Switch Proxy/切換代理在最新版的規範中,306狀態碼已經不再被使用。這店裏的雞太差了,換個。
307Temporary Redirect/臨時重定向在響應爲303時按照GET和POST請求轉向;而在307響應時則按照GET請求轉向而不是POST請求。不是這裏, 換個地方啦
4xx—表示請求錯誤。代表客戶端可能發生了錯誤,妨礙服務器的處理。
400Bad Request/錯誤請求指出客戶端請求中的語法錯誤。不要把奇怪的東西給人家嘛
401Unauthorized/未授權表示客戶端在授權頭信息中沒有有效的身份信息時訪問受到密碼保護的頁面。對上對聯,才讓進洞房。
403Forbidden/禁止表示除非擁有授權否則服務器拒絕提供所請求的資源。這裏不可以啦!
404Not Found/未找到告訴客戶端所給的地址無法找到任何資源。這裏什麼都沒有 — 人家是平的啦
405Method Not Allowed/方法未允許表示請求方法(GET, POST, HEAD, PUT, DELETE, 等)對某些特定的資源不允許使用。打開方式不對
406Not Acceptable/無法訪問表示請求資源的MIME類型與客戶端中Accept頭信息中指定的類型不一致。啊啊啊,慢着!!好疼
407Proxy Authentication Required/代理服務器認證要求該狀態指出客戶端必須通過代理服務器的認證。
408Request Timeout/請求超時指服務端等待客戶端發送請求的時間過長。
409Conflict/衝突該狀態通常與PUT請求一同使用,409 狀態常被用於試圖上傳版本不正確的文件時。找小姐找到了自己媳婦,然後…
410Gone/已經不存在告訴客戶端所請求的文檔已經不存在並且沒有更新的地址。410狀態不同於404,410是在指導文檔已被移走的情況下使用,而404則用於未知原因的無法訪問。那個,你是個好人……
411Length Required/需要數據長度表示服務器不能處理請求,除非客戶端發送Content-Length頭信息指出發送給服務器的數據的大小。太長了…進不去
412Precondition Failed/先決條件錯誤指出請求頭信息中的某些先決條件是錯誤的。先買房,然後才能結婚。
413Request Entity Too Large/請求實體過大告訴客戶端現在所請求的文檔比服務器現在想要處理的要大。
414Request URI Too Long/請求URI過長用於在URI過長的情況時。這裏所指的"URI"是指URL中主機、域名及端口號之後的內容。這… 太長了啦
415Unsupported Media Type/不支持的媒體格式意味着請求所帶的附件的格式類型服務器不知道如何處理。石女
416Requested Range Not Satisfiable/請求範圍無法滿足表示客戶端包含了一個服務器無法滿足的Range頭信息的請求。
417Expectation Failed/期望失敗表示在請求頭Expect中指定的預期內容無法被服務器滿足。沒房,只能分手了。
418I’m a teapot/我是杯具本操作碼是在1998年作爲IETF的傳統愚人節笑話,並不需要在真實的HTTP服務器中定義。我就是個杯具啊
421There are too many connections from your internet address/該IP發起的鏈接過多。從當前客戶端所在的IP地址到服務器的連接數超過了服務器許可的最大範圍。
422Unprocessable Entity/錯誤實體請求格式正確,但是由於含有語義錯誤,無法響應。
423Locked/鎖定當前資源被鎖定。
424Failed Dependency/錯誤關聯由於之前的某個請求發生的錯誤,導致當前請求失敗。
425Unordered Collection/亂序集合在WebDav Advanced Collections草案中定義,但是未出現在《WebDAV順序集協議》(RFC 3658)中。
426Upgrade Required/升級要求客戶端應當切換到TLS/1.0。
428Precondition Required/要求先決條件先決條件是客戶端發送 HTTP 請求時,如果想要請求能成功必須滿足一些預設的條件。主人~~不要這麼快麼~人家還沒溼呢。
429Too Many Requests /太多請求當你需要限制客戶端請求某個服務數量時,該狀態碼就很有用,也就是請求速度限制。主人~~我快要受不了了~
431Request Header Fields Too Large /請求頭字段太大某些情況下,客戶端發送 HTTP 請求頭會變得很大,那麼服務器可發送 431狀態碼 來指明該問題。主人~~這麼大方不進去的~~
449Retry With/稍後重試由微軟擴展,代表請求應當在執行完適當的操作後進行重試。
451Unavailable for Legal Reasons/正被審查代表那些因爲法律原因而倒下的網站。不要啦我們還沒領證呀
5XX—表示服務器錯誤。代表服務器在處理請求的過程中異常狀態發生。
500Internal Server Error/內部服務器錯誤服務器遇到了一個未曾預料的狀況,導致了它無法完成對請求的處理。糟了,身體變得有點奇怪了
501Not Implemented/未實現服務器不支持當前請求所需要的某個功能。
502Bad Gateway/錯誤的網關作爲網關或者代理工作的服務器嘗試執行請求時,從上游服務器接收到無效的響應。進錯了嗎?
503Service Unavailable/服務無法獲得表示服務器由於在維護或已經超載而無法響應。不要…人家還沒準備好啦
504Gateway Timeout/網關超時指出接收服務器沒有從遠端服務器得到及時的響應。
505HTTP Version Not Supported/不支持的 HTTP 版本表示服務器並不支持在請求中所標明 HTTP 版本。放開我,放開我,不要中出啊,會懷孕的(但其實是男生,不會懷孕)
506Variant Also Negotiates代表服務器存在內部配置錯誤:被請求的協商變元資源被配置爲在透明內容協商中使用自己,因此在一個協商處理中不是一個合適的重點。
507Insufficient Storage服務器無法存儲完成請求所必須的內容。都流出來了…
509Bandwidth Limit Exceeded服務器達到帶寬限制。這不是一個官方的狀態碼,但是仍被廣泛使用。今天不接客了
510Not Extended獲取資源所需要的策略並沒有沒滿足。沒車沒錢還想泡妞?
511Network Authentication Required /要求網絡認證在你想使用web服務的時候需要重定向到認證頁面,在走HTTP通信中都是這麼做的,主人~~不要矇住我的眼睛~會好興奮的!~

注:

  1. RFC-Request For Comments是由Internet Society(ISOC)贊助發行,用於定義基本的互聯網通信協議的一些列文件。文中所用的RFC文件地址如下:


  2. 表格中,斜體字的“中英雙解”是我自己翻譯的。如果不正確,請留指正。

  3. 428、429、431以及511是2012年4月發佈的 RFC6585手冊中新增的4個狀態碼。


  4. 451是XML標準發明人之一、Android開發人員Tim Bray提議設立一個新的HTTP錯誤代碼。這個還沒有成爲正式標準。


參考資料




作 者: D瓜哥,http://www.diguage.com/
原文鏈接:http://www.diguage.com/archives/33.html
版權聲明:非特殊聲明均爲本站原創作品,轉載時請註明作者和原文鏈接。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章