HTTP協議 (六) 狀態碼詳解_第1頁
HTTP協議 (六) 狀態碼詳解_第2頁
HTTP協議 (六) 狀態碼詳解_第3頁
HTTP協議 (六) 狀態碼詳解_第4頁
HTTP協議 (六) 狀態碼詳解_第5頁
已閱讀5頁,還剩15頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

HTTP狀態碼,我都是現查現用。我以前記得幾個常用的狀態碼,比如200,302,304,404,503。一般來說我也只需要了解這些常用的狀態碼就可以了。

如果是做AJAX,REST,網絡爬蟲,機器人等程序。還是需要了解其他狀態碼。

本文我花了一個多月的時間把所有的狀態碼都總結了下,內容太多,看的時候麻煩耐心點了。HTTP狀態碼的學習資料到處都有,但是都是理論上講解。

本文介紹HTTP協議中的HTTP狀態碼(HTTPStatusCode),會對大部分的狀態碼都進行了詳細的實例講解。要了解狀態碼,應該在實例中去理解狀態碼的意義,否則看了也會忘記的。用Fiddler工具可以查看HTTPRequest和Response,還可以方便地查看Response中的狀態碼,如果不熟悉這個工具,可以先參考【Fiddler教程】為了重現HTTP狀態碼,本文會使用FiddlerComposer來創建“特殊的HTTPRequest”.

可以參考【FiddlerComposer創建和發送HTTPRequest】

閱讀目錄什么是HTTP狀態碼狀態碼分類常見的狀態碼1XX消息2XX成功3XX重定向4XX客戶端錯誤5XX服務器錯誤204NoContent(沒有內容)206

PartialContent(部分內容)301MovedPermanently(永久移除)400BadRequest(壞請求)403Forbidden(禁止)405MethodNotAllowed(不允許使用的方法)411LengthRequired(要求長度指示)413RequestEntityTooLarge(請求實體太大)414RequestURITooLong(請求URI太長)500InternalServerError(內部服務器錯誤)501NotImplemented(未實現)502BadGateway(網關故障)505HTTPVersionNotSupported(不支持的HTTP版本)

什么是HTTP狀態碼HTTP狀態碼的作用是:Web服務器用來告訴客戶端,發生了什么事。狀態碼位于HTTPResponse的第一行中,會返回一個”三位數字的狀態碼“和一個“狀態消息”。”三位數字的狀態碼“便于程序進行處理,“狀態消息”更便于人理解。

如下圖,

當客戶端請求一個不存在的URL的時候,Web服務器會返回“HTTP/1.1404NotFound”告訴瀏覽器客戶端。服務器無法找到所請求的URL。狀態碼分類HTTP狀態碼被分為五大類,目前我們使用的HTTP協議版本是1.1,支持以下的狀態碼。隨著協議的發展,HTTP規范中會定義更多的狀態碼。

小技巧:

假如你看到一個狀態碼518,你并不知道具體518是什么意思。這時候你只要知道518是屬于(5XX,服務器錯誤就可以了)

已定義范圍分類1XX100-101信息提示2XX200-206成功3XX300-305重定向4XX400-415客戶端錯誤5XX500-505服務器錯誤

常見的狀態碼一般人只需要了解以下常見的狀態碼就夠了,如果你想了解更多,請繼續往下看。200OK服務器成功處理了請求(這個是我們見到最多的)301/302MovedPermanently(重定向)請求的URL已移走。Response中應該包含一個LocationURL,說明資源現在所處的位置304NotModified(未修改)客戶的緩存資源是最新的,要客戶端使用緩存404NotFound未找到資源501InternalServerError服務器遇到一個錯誤,使其無法對請求提供服務

1XX信息性狀態碼這些狀態碼是HTTP1.1引入的。對于這些狀態碼的價值還存在爭論(我個人從來沒見過這些狀態碼,也沒有理解這些狀態碼。)狀態碼

狀態消息

含義

實例100Continue(繼續)收到了請求的起始部分,客戶端應該繼續請求

101SwitchingProtocols(切換協議)服務器正根據客戶端的指示將協議切換成UpdateHeader列出的協議

2XX成功狀態碼客戶端發起請求時,這些請求通常都是成功的。服務器有一組用來表示成功的狀態碼,分別對應于不同類型的請求。狀態碼狀態消息含義實例200OK服務器成功處理了請求(這個是我們見到最多的)

HTTP協議詳解-200201Created(已創建)對于那些要服務器創建對象的請求來說,資源已創建完畢。

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

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

204NoContent(沒有內容)Response中包含一些Header和一個狀態行,但不包括實體的主題內容(沒有responsebody)

狀態碼204205ResetContent(重置內容)

另一個主要用于瀏覽器的代碼。意思是瀏覽器應該重置當前頁面上所有的HTML表單。

206PartialContent(部分內容)

部分請求成功

狀態碼206

3XX重定向狀態碼重定向狀態碼用來告訴瀏覽器客戶端,它們訪問的資源已被移動,Web服務器發送一個重定向狀態碼和一個可選的LocationHeader,告訴客戶端新的資源地址在哪。瀏覽器客戶端會自動用Location中提供的地址,重新發送新的Request。這個過程對用戶來說是透明的。301和302非常相似,

一個是永久轉移,一個是臨時轉移。

(SEO中,搜索引擎如果碰到301,比如網頁A用301重定向到網頁B,搜索引擎可以肯定網頁A永久性改變地址,就會把網頁B當做唯一有效目標)302,303,307是一樣。

這是因為302是HTTP1.0定義的,HTTP1.1中使用303,307.同時又保留了302.

(但在現實中,我們還是用302,我是沒見過303和307)

所以這一節,我們只需要掌握302,304就可以了。

狀態碼狀態消息含義實例300MultipleChoices(多項選擇)

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

301MovedPermanently(永久移除)請求的URL已移走。Response中應該包含一個LocationURL,說明資源現在所處的位置狀態碼301302Found(已找到)與狀態碼301類似。但這里的移除是臨時的。客戶端會使用Location中給出的URL,重新發送新的HTTPrequestHTTP協議詳解-302303

SeeOther(參見其他)類似302

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

UseProxy(使用代理)必須通過代理訪問資源,代理的地址在Response的Location中

306

未使用

這個狀態碼當前沒使用

307TemporaryRedirect(臨時重定向類似302

4XX客戶端錯誤狀態碼有時客戶端會發送一些服務器無法處理的東西,比如格式錯誤的Request,或者最常見的是,請求一個不存在的URL。狀態碼狀態消息含義實例400BadRequest(壞請求)告訴客戶端,它發送了一個錯誤的請求。狀態碼400401Unauthorized(未授權)需要客戶端對自己認證HTTP協議之基本認證-401402PaymentRequired(要求付款)這個狀態還沒被使用,保留給將來用

403Forbidden(禁止)請求被服務器拒絕了狀態碼403404NotFound(未找到)未找到資源HTTP協議詳解-404405MethodNotAllowed(不允許使用的方法)不支持該Request的方法。狀態碼405406NotAcceptable(無法接受)

407ProxyAuthenticationRequired(要求進行代理認證)與狀態碼401類似,用于需要進行認證的代理服務器HTTP協議之代理-407408RequestTimeout(請求超時)

如果客戶端完成請求時花費的時間太長,服務器可以回送這個狀態碼并關閉連接

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

410Gone(消失了)服務器曾經有這個資源,現在沒有了,與狀態碼404類似

411LengthRequired(要求長度指示)服務器要求在Request中包含Content-Length。狀態碼411412PreconditionFailed(先決條件失敗)

413RequestEntityTooLarge(請求實體太大)客戶端發送的實體主體部分比服務器能夠或者希望處理的要大狀態碼413414RequestURITooLong(請求URI太長)客戶端發送的請求所攜帶的URL超過了服務器能夠或者希望處理的長度狀態碼414415UnsupportedMediaType(不支持的媒體類型)服務器無法理解或不支持客戶端所發送的實體的內容類型

416RequestedRangeNotSatisfiable(所請求的范圍未得到滿足)

417ExpectationFailed(無法滿足期望)

5XX服務器錯誤狀態碼有時候客戶端發送了一條有效Request,Web服務器自身卻出錯了。可能是Web服務器運行出錯了,或者網站都掛了。

5XX就是用來描述服務器錯誤的。

狀態碼狀態消息含義實例500InternalServerError(內部服務器錯誤)服務器遇到一個錯誤,使其無法為請求提供服務狀態碼500501NotImplemented(未實現)客戶端發起的請求超出服務器的能力范圍(比如,使用了服務器不支持的請求方法)時,使用此狀態碼。狀態碼501502BadGateway(網關故障)代理使用的服務器遇到了上游的無效響應狀態碼502503ServiceUnavailable(未提供此服務)服務器目前無法為請求提供服務,但過一段時間就可以恢復服務

504GatewayTimeout(網關超時)與狀態嗎408類似,但是響應來自網關或代理,此網關或代理在等待另一臺服務器的響應時出現了超時

505HTTPVersionNotSupported(不支持的HTTP版本)服務器收到的請求使用了它不支持的HTTP協議版本。有些服務器不支持HTTP早期的HTTP協議版本,也不支持太高的協議版本狀態碼505

204NoContent(沒有內容)返回的Response中只有一些Header和一個狀態行,沒有實體的主題內容(沒有responsebody)204狀態碼的作用在于:1.在不獲取資源的情況下了解資源的情況(比如判斷其類型)2.通過查看Response中的狀態碼,看看某個對象是否存在3.通過查看Header,測試資源是否被修改了。實例:先打開Fiddler,然后啟動瀏覽器訪問,

你會捕獲到很多204

206PartialContent(部分內容)206狀態碼代表服務器已經成功處理了部分GET請求(只有發送GET方法的request,web服務器才可能返回206),應用場景:1.FlashGet,迅雷或者HTTP下載工具都是使用206狀態碼來實現斷點續傳2.將以個大文檔分解為多個下載段同時下載比如,在線看視頻

實例:一些流媒體技術比如在線視頻,可以邊看邊下載。就是使用206來實現的。打開Fiddler,然后用瀏覽器打開“搜狐視頻中的綠箭俠”

/20121011/n354681393.shtml

然后你在Fiddler中就能看到一堆的2061.瀏覽器發送一個Get方法的request.

header中包含Range:bytes=5303296-5336063.(意思就是請求得到5303296-5336063這個范圍的數據)。2.Web服務器返回一個206的Response.header中包含Content-Range:bytes5303296-5336063/12129376(表明這次返回的內容范圍)301MovedPermanently(永久移除)請求的URL已移走。Response中應該包含一個LocationURL,說明資源現在所處的位置例如:

1.

瀏覽器客戶端訪問

2.Web服務器返回Response301,Location=

(告訴客戶端我們的資源位于這里,)3.瀏覽器客戶端會自動再發送一個Request去訪問

400BadRequest(壞請求)發送的Request中的數據有錯誤(比如:表單有錯誤,Cookie有錯誤),

這個我們也經常見到。

實例:還沒想到,想到了再貼個實例上來。

403Forbidden(禁止)Web客戶端發送的請求被Web服務器拒絕了,如果服務器想說明為什么拒絕請求,可以包含實體的主體部分來對原因進行描述。但這個狀態碼通常是服務器不想說明拒絕原因。訪問下面的URL,會被服務器拒絕.并且返回403狀態碼/it/u=1791561788,200960144&fm=0&gp=0.jpg

404PagenotFound(請求的資源不存在)這個大家都懂的,值得一提的是:騰訊把404頁面做成了“尋找被拐兒童”

405MethodNotAllowed(不允許使用的方法)405是指Web服務器不支持Request中的方法。我個人認為狀態碼405MethodNotAllowed和501NotImplemented是一樣的意思。都是不支持Request的方法。(目前我還不知道這兩個的區別)實例:

發送一個是trace方法的Request給411LengthRequired(要求長度指示)服務器要求在Request中包含Content-Length。當瀏覽器使用Post方法,發送數據給Web服務器時,必須要有Content-Length。這樣Web服務器才知道你要發送多少數據,否則Web服務器會返回411狀態碼實例:發送一個Post方法的Request給.

Request中沒有Content-Length

413RequestEntityTooLarge(請求實體太大)作用:客戶端發送的實體主體部分比服務器能夠或者希望處理的要大。

一般情況下我們看不到這個狀態碼。因為瀏覽器不會發送太大的數據給網站,但是機器人可能會。實例:用post方法發送一個大文件(100MB以上)給414RequestURITooLong(請求URI太長)就是說RequestURI太長,一般瀏覽器

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論