(轉(zhuǎn))HTTP協(xié)議 (六) 狀態(tài)碼詳解

HTTP狀態(tài)碼,我都是現(xiàn)查現(xiàn)用劣光。 我以前記得幾個常用的狀態(tài)碼袜蚕,比如200,302绢涡,304牲剃,404, 503雄可。

一般來說我也只需要了解這些常用的狀態(tài)碼就可以了凿傅。? 如果是做AJAX,REST,網(wǎng)絡(luò)爬蟲数苫,機器人等程序聪舒。還是需要了解其他狀態(tài)碼。

本文我花了一個多月的時間把所有的狀態(tài)碼都總結(jié)了下虐急,內(nèi)容太多箱残,看的時候麻煩耐心點了。

HTTP狀態(tài)碼的學習資料到處都有,但是都是理論上講解被辑。? 本文介紹HTTP協(xié)議中的HTTP狀態(tài)碼(HTTP Status Code)燎悍, 會對大部分的狀態(tài)碼都進行了詳細的實例講解。

要了解狀態(tài)碼盼理,應該在實例中去理解狀態(tài)碼的意義谈山,否則看了也會忘記的。

用Fiddler工具可以查看HTTP Request和Response, 還可以方便地查看Response中的狀態(tài)碼宏怔, 如果不熟悉這個工具奏路,可以先參考【Fiddler教程】

為了重現(xiàn)HTTP 狀態(tài)碼,本文會使用Fiddler Composer來創(chuàng)建“特殊的HTTP Request”.? 可以參考【Fiddler Composer創(chuàng)建和發(fā)送HTTP Request

閱讀目錄

什么是HTTP狀態(tài)碼

狀態(tài)碼分類

常見的狀態(tài)碼

1XX 消息

2XX 成功

3XX 重定向

4XX 客戶端錯誤

5XX 服務器錯誤

204 No Content(沒有內(nèi)容)

206? Partial Content(部分內(nèi)容)

301 Moved Permanently(永久移除)

400 Bad Request(壞請求)

403 Forbidden(禁止)

405 Method Not Allowed(不允許使用的方法)

411 Length Required(要求長度指示)

413 Request Entity Too Large(請求實體太大)

414 Request URI Too Long(請求URI太長)

500 Internal Server Error(內(nèi)部服務器錯誤)

501 Not Implemented(未實現(xiàn))

502 Bad Gateway(網(wǎng)關(guān)故障)

505 HTTP Version Not Supported(不支持的HTTP版本)

什么是HTTP狀態(tài)碼

HTTP狀態(tài)碼的作用是:Web服務器用來告訴客戶端举哟,發(fā)生了什么事思劳。

狀態(tài)碼位于HTTP Response 的第一行中,會返回一個”三位數(shù)字的狀態(tài)碼“和一個“狀態(tài)消息”妨猩。 ”三位數(shù)字的狀態(tài)碼“便于程序進行處理潜叛, “狀態(tài)消息”更便于人理解。

如下圖壶硅,? 當客戶端請求一個不存在的URL的時候威兜, Web服務器會返回 “HTTP/1.1 404 Not Found” 告訴瀏覽器客戶端。 服務器無法找到所請求的URL庐椒。

狀態(tài)碼分類

HTTP狀態(tài)碼被分為五大類椒舵, 目前我們使用的HTTP協(xié)議版本是1.1, 支持以下的狀態(tài)碼约谈。隨著協(xié)議的發(fā)展笔宿,HTTP規(guī)范中會定義更多的狀態(tài)碼。

小技巧:? 假如你看到一個狀態(tài)碼518棱诱, 你并不知道具體518是什么意思泼橘。 這時候你只要知道518是屬于(5XX,服務器錯誤就可以了)

已定義范圍分類

1XX100-101信息提示

2XX200-206成功

3XX300-305重定向

4XX400-415客戶端錯誤

5XX500-505服務器錯誤

常見的狀態(tài)碼

一般人只需要了解以下常見的狀態(tài)碼就夠了迈勋, 如果你想了解更多炬灭, 請繼續(xù)往下看。

200 OK 服務器成功處理了請求(這個是我們見到最多的)

301/302 Moved Permanently(重定向)請求的URL已移走靡菇。Response中應該包含一個Location URL, 說明資源現(xiàn)在所處的位置

304 Not Modified(未修改)客戶的緩存資源是最新的重归, 要客戶端使用緩存

404 Not Found 未找到資源

501 Internal Server Error服務器遇到一個錯誤,使其無法對請求提供服務

1XX 信息性狀態(tài)碼

這些狀態(tài)碼是HTTP 1.1引入的厦凤。 對于這些狀態(tài)碼的價值還存在爭論 (我個人從來沒見過這些狀態(tài)碼鼻吮, 也沒有理解這些狀態(tài)碼。)

狀態(tài)碼狀態(tài)消息含義實例

100Continue(繼續(xù))收到了請求的起始部分泳唠,客戶端應該繼續(xù)請求

101Switching Protocols(切換協(xié)議)服務器正根據(jù)客戶端的指示將協(xié)議切換成Update Header列出的協(xié)議

2XX 成功狀態(tài)碼

客戶端發(fā)起請求時狈网, 這些請求通常都是成功的。服務器有一組用來表示成功的狀態(tài)碼笨腥,分別對應于不同類型的請求拓哺。

狀態(tài)碼狀態(tài)消息含義實例

200OK服務器成功處理了請求(這個是我們見到最多的)HTTP協(xié)議詳解-200

201Created(已創(chuàng)建)對于那些要服務器創(chuàng)建對象的請求來說,資源已創(chuàng)建完畢脖母。

202Accepted(已接受)請求已接受士鸥, 但服務器尚未處理

203Non-Authoritative Information(非權(quán)威信息)服務器已將事務成功處理,只是實體Header包含的信息不是來自原始服務器谆级,而是來自資源的副本烤礁。

204No Content(沒有內(nèi)容)Response中包含一些Header和一個狀態(tài)行, 但不包括實體的主題內(nèi)容(沒有response body)狀態(tài)碼204

205Reset Content(重置內(nèi)容)另一個主要用于瀏覽器的代碼肥照。意思是瀏覽器應該重置當前頁面上所有的HTML表單脚仔。

206Partial Content(部分內(nèi)容)部分請求成功狀態(tài)碼206

3XX 重定向狀態(tài)碼

重定向狀態(tài)碼用來告訴瀏覽器客戶端,它們訪問的資源已被移動舆绎, Web服務器發(fā)送一個重定向狀態(tài)碼和一個可選的Location Header, 告訴客戶端新的資源地址在哪鲤脏。

瀏覽器客戶端會自動用Location中提供的地址,重新發(fā)送新的Request吕朵。 這個過程對用戶來說是透明的猎醇。

301和302 非常相似,? 一個是永久轉(zhuǎn)移努溃,一個是臨時轉(zhuǎn)移硫嘶。

(SEO中,搜索引擎如果碰到301梧税, 比如網(wǎng)頁A用301重定向到網(wǎng)頁B沦疾,搜索引擎可以肯定網(wǎng)頁A永久性改變地址,就會把網(wǎng)頁B當做唯一有效目標)

302第队,303哮塞,307 是一樣。? 這是因為302是HTTP 1.0定義的斥铺, HTTP1.1中使用303,307. 同時又保留了302.? (但在現(xiàn)實中彻桃,我們還是用302,我是沒見過303和307)

所以這一節(jié)晾蜘, 我們只需要掌握302邻眷, 304 就可以了。

狀態(tài)碼狀態(tài)消息含義實例

300Multiple Choices(多項選擇)客戶端請求了實際指向多個資源的URL剔交。這個代碼是和一個選項列表一起返回的肆饶,然后用戶就可以選擇他希望的選項了

301Moved Permanently(永久移除)請求的URL已移走。Response中應該包含一個Location URL, 說明資源現(xiàn)在所處的位置狀態(tài)碼301

302Found(已找到)與狀態(tài)碼301類似岖常。但這里的移除是臨時的驯镊。 客戶端會使用Location中給出的URL,重新發(fā)送新的HTTP requestHTTP協(xié)議詳解-302

303See Other(參見其他)類似302

304Not Modified(未修改)客戶的緩存資源是最新的, 要客戶端使用緩存HTTP協(xié)議之緩存-304

305Use Proxy(使用代理)必須通過代理訪問資源板惑, 代理的地址在Response 的Location中

306未使用這個狀態(tài)碼當前沒使用

307Temporary Redirect(臨時重定向類似302

4XX客戶端錯誤狀態(tài)碼

有時客戶端會發(fā)送一些服務器無法處理的東西橄镜,比如格式錯誤的Request, 或者最常見的是, 請求一個不存在的URL冯乘。

狀態(tài)碼狀態(tài)消息含義實例

400Bad Request(壞請求)告訴客戶端洽胶,它發(fā)送了一個錯誤的請求。狀態(tài)碼400

401Unauthorized(未授權(quán))需要客戶端對自己認證HTTP協(xié)議之基本認證-401

402Payment Required(要求付款)這個狀態(tài)還沒被使用裆馒, 保留給將來用

403Forbidden(禁止)請求被服務器拒絕了狀態(tài)碼403

404Not Found(未找到)未找到資源HTTP協(xié)議詳解-404

405Method Not Allowed(不允許使用的方法)不支持該Request的方法姊氓。狀態(tài)碼405

406Not Acceptable(無法接受)

407Proxy Authentication Required(要求進行代理認證)與狀態(tài)碼401類似, 用于需要進行認證的代理服務器HTTP協(xié)議之代理-407

408Request Timeout(請求超時)如果客戶端完成請求時花費的時間太長喷好, 服務器可以回送這個狀態(tài)碼并關(guān)閉連接

409Conflict(沖突)發(fā)出的請求在資源上造成了一些沖突

410Gone(消失了)服務器曾經(jīng)有這個資源翔横,現(xiàn)在沒有了, 與狀態(tài)碼404類似

411Length Required(要求長度指示)服務器要求在Request中包含Content-Length梗搅。狀態(tài)碼411

412Precondition Failed(先決條件失敽萄洹)

413Request Entity Too Large(請求實體太大)客戶端發(fā)送的實體主體部分比服務器能夠或者希望處理的要大狀態(tài)碼413

414Request URI Too Long(請求URI太長)客戶端發(fā)送的請求所攜帶的URL超過了服務器能夠或者希望處理的長度狀態(tài)碼414

415Unsupported Media Type(不支持的媒體類型)服務器無法理解或不支持客戶端所發(fā)送的實體的內(nèi)容類型

416Requested Range Not Satisfiable(所請求的范圍未得到滿足)

417Expectation Failed(無法滿足期望)

5XX服務器錯誤狀態(tài)碼

有時候客戶端發(fā)送了一條有效Request, Web服務器自身卻出錯了。 可能是Web服務器運行出錯了些膨, 或者網(wǎng)站都掛了蟀俊。? 5XX就是用來描述服務器錯誤的。

狀態(tài)碼狀態(tài)消息含義實例

500Internal Server Error(內(nèi)部服務器錯誤)服務器遇到一個錯誤订雾,使其無法為請求提供服務狀態(tài)碼500

501Not Implemented(未實現(xiàn))客戶端發(fā)起的請求超出服務器的能力范圍(比如肢预,使用了服務器不支持的請求方法)時,使用此狀態(tài)碼洼哎。狀態(tài)碼501

502Bad Gateway(網(wǎng)關(guān)故障)代理使用的服務器遇到了上游的無效響應狀態(tài)碼502

503Service Unavailable(未提供此服務)服務器目前無法為請求提供服務烫映,但過一段時間就可以恢復服務

504Gateway Timeout(網(wǎng)關(guān)超時)與狀態(tài)嗎408類似, 但是響應來自網(wǎng)關(guān)或代理噩峦,此網(wǎng)關(guān)或代理在等待另一臺服務器的響應時出現(xiàn)了超時

505HTTP Version Not Supported(不支持的HTTP版本)服務器收到的請求使用了它不支持的HTTP協(xié)議版本锭沟。 有些服務器不支持HTTP早期的HTTP協(xié)議版本,也不支持太高的協(xié)議版本狀態(tài)碼505

204 No Content(沒有內(nèi)容)

返回的Response中只有一些Header和一個狀態(tài)行识补, 沒有實體的主題內(nèi)容(沒有response body)

204狀態(tài)碼的作用在于: 1. 在不獲取資源的情況下了解資源的情況(比如判斷其類型)

2. 通過查看Response中的狀態(tài)碼族淮, 看看某個對象是否存在

3. 通過查看Header, 測試資源是否被修改了。

實例:先打開Fiddler, 然后啟動瀏覽器訪問ditu.google.cn,? 你會捕獲到很多204

206 Partial Content(部分內(nèi)容)

206狀態(tài)碼代表服務器已經(jīng)成功處理了部分GET請求(只有發(fā)送GET 方法的request, web服務器才可能返回206)凭涂,

應用場景:

1. FlashGet, 迅雷或者HTTP下載工具都是使用206狀態(tài)碼來實現(xiàn)斷點續(xù)傳

2. 將以個大文檔分解為多個下載段同時下載 比如祝辣,在線看視頻

實例: 一些流媒體技術(shù)比如在線視頻,可以邊看邊下載切油◎保 就是使用206來實現(xiàn)的。

打開Fiddler澎胡, 然后用瀏覽器打開“搜狐視頻中的綠箭俠”http://tv.sohu.com/20121011/n354681393.shtml然后你在Fiddler中就能看到一堆的206

1. 瀏覽器發(fā)送一個Get 方法的request.? header中包含 Range: bytes=5303296-5336063. (意思就是請求得到5303296-5336063這個范圍的數(shù)據(jù))孕荠。

2. Web服務器返回一個206 的Response. header中包含Content-Range: bytes 5303296-5336063/12129376(表明這次返回的內(nèi)容范圍)

301 Moved Permanently(永久移除)

請求的URL已移走娩鹉。Response中應該包含一個Location URL, 說明資源現(xiàn)在所處的位置

例如:? 1.? 瀏覽器客戶端訪問http://map.google.cn

2. Web服務器返回Response 301,Location=http://titu.google.cn? (告訴客戶端我們的資源位于這里稚伍, )

3. 瀏覽器客戶端會自動再發(fā)送一個Request 去訪問http://titu.google.cn

400 Bad Request(壞請求)

發(fā)送的Request中的數(shù)據(jù)有錯誤(比如:表單有錯誤弯予,Cookie有錯誤),? 這個我們也經(jīng)常見到槐瑞。

實例: 還沒想到熙涤, 想到了再貼個實例上來阁苞。

403 Forbidden(禁止)

Web客戶端發(fā)送的請求被Web服務器拒絕了困檩, 如果服務器想說明為什么拒絕請求,可以包含實體的主體部分來對原因進行描述那槽。但這個狀態(tài)碼通常是服務器不想說明拒絕原因悼沿。

訪問下面的URL, 會被服務器拒絕. 并且返回403狀態(tài)碼

http://t2.baidu.com/it/u=1791561788,200960144&fm=0&gp=0.jpg

404 Page not Found (請求的資源不存在)

這個大家都懂的骚灸, 值得一提的是: 騰訊把404頁面做成了“尋找被拐兒童”

405 Method Not Allowed(不允許使用的方法)

405是指Web服務器不支持Request中的方法糟趾。

我個人認為狀態(tài)碼405Method Not Allowed和501 Not Implemented 是一樣的意思。都是不支持Request的方法甚牲。 (目前我還不知道這兩個的區(qū)別)

實例:? 發(fā)送一個是trace方法的Request 給www.google.com

411 Length Required(要求長度指示)

服務器要求在Request中包含Content-Length义郑。

當瀏覽器使用Post方法,發(fā)送數(shù)據(jù)給Web服務器時丈钙, 必須要有Content-Length非驮。這樣Web服務器才知道你要發(fā)送多少數(shù)據(jù),否則Web服務器會返回411狀態(tài)碼

實例: 發(fā)送一個Post方法的Request 給www.google.com.?? Request中沒有Content-Length

413 Request Entity Too Large(請求實體太大)

作用:客戶端發(fā)送的實體主體部分比服務器能夠或者希望處理的要大雏赦。? 一般情況下我們看不到這個狀態(tài)碼劫笙。 因為瀏覽器不會發(fā)送太大的數(shù)據(jù)給網(wǎng)站,但是機器人可能會星岗。

實例: 用post方法發(fā)送一個大文件(100MB以上)給www.google.com

414 Request URI Too Long(請求URI太長)

就是說Request URI太長填大, 一般瀏覽器本身對URI的長度就會有限制,所以不會發(fā)送URI很長的Request. 我們平常是根本看不到414錯誤的俏橘。 但是機器人可以發(fā)送很長URI允华。

例如:我們用Fiddler Composer發(fā)送一個很長的URI給Google, 比如 "www.google.com?q=asdfasdasf.."? q=后面的參數(shù)很長。 就可以看到414了

500 Internal Server Error(內(nèi)部服務器錯誤)

這個太常見了寥掐, 我們開發(fā)網(wǎng)站的時候靴寂,當我們的程序出錯了時,就會返回500錯誤曹仗。

實例:ASP.NET 程序出錯

501 Not Implemented(未實現(xiàn))

客戶端發(fā)起的請求超出服務器的能力范圍(比如榨汤,使用了服務器不支持的請求方法)時,使用此狀態(tài)碼)怎茫。? 一般的Web服務器只支持GET和POST方法收壕。

實例: 使用Fiddler Composer 給www.qq.com,? 發(fā)送一個OPTIONS 方法的Request.?? 服務器就能返回501了妓灌。

502 Bad Gateway(網(wǎng)關(guān)故障)

代理使用的服務器遇到了上游的無效響應。

Fiddler本身就是代理服務器蜜宪。? 當我們訪問www.facebook.com虫埂,這網(wǎng)站被我們天朝屏蔽了。 所以我們可以得到502

505 HTTP Version Not Supported(不支持的HTTP版本)

表示W(wǎng)eb服務器不支持此HTTP協(xié)議的版本圃验。

眾所周知我們現(xiàn)在使用的HTTP協(xié)議版本是HTTP/1.1掉伏, 如果我們發(fā)送一個HTTP/2.0 的request 給博客園, 博客園肯定不能支持HTTP/2.0澳窑,所以會返回505

想要發(fā)送這樣的request, 可以使用Fiddler工具中的Composer來發(fā)送自定義的request, 如下圖斧散。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市摊聋,隨后出現(xiàn)的幾起案子鸡捐,更是在濱河造成了極大的恐慌,老刑警劉巖麻裁,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件箍镜,死亡現(xiàn)場離奇詭異,居然都是意外死亡煎源,警方通過查閱死者的電腦和手機色迂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來手销,“玉大人歇僧,你說我怎么就攤上這事≡祝” “怎么了馏慨?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長姑隅。 經(jīng)常有香客問我写隶,道長,這世上最難降的妖魔是什么讲仰? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任慕趴,我火速辦了婚禮,結(jié)果婚禮上鄙陡,老公的妹妹穿的比我還像新娘冕房。我一直安慰自己,他們只是感情好趁矾,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布耙册。 她就那樣靜靜地躺著,像睡著了一般毫捣。 火紅的嫁衣襯著肌膚如雪详拙。 梳的紋絲不亂的頭發(fā)上帝际,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天,我揣著相機與錄音饶辙,去河邊找鬼蹲诀。 笑死,一個胖子當著我的面吹牛弃揽,可吹牛的內(nèi)容都是我干的脯爪。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼矿微,長吁一口氣:“原來是場噩夢啊……” “哼痕慢!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起冷冗,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤守屉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蒿辙,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡滨巴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年思灌,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恭取。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡泰偿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蜈垮,到底是詐尸還是另有隱情耗跛,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布攒发,位于F島的核電站调塌,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏惠猿。R本人自食惡果不足惜羔砾,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望偶妖。 院中可真熱鬧姜凄,春花似錦、人聲如沸趾访。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽扼鞋。三九已至申鱼,卻和暖如春空扎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背润讥。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工转锈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人楚殿。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓撮慨,卻偏偏與公主長得像,于是被迫代替她去往敵國和親脆粥。 傳聞我的和親對象是個殘疾皇子砌溺,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容