fiddler——http——請求方法、狀態碼


注意:本章整理內容,參考於小坦克的文章資源:https://www.cnblogs.com/TankXiao/archive/2013/01/08/2818542.html#commonCode

URL詳解

URL(Uniform Resource Locator) 地址用於描述一個網絡上的資源,  基本格式如下:


schema://host[:port#]/path/.../[?query-string][#anchor]


scheme        指定低層使用的協議(例如:http, https, ftp)

host          HTTP服務器的IP地址或者域名

port#         HTTP服務器的默認端口是80,這種情況下端口號可以省略。如果使用了別的端口,必須指明,例如 http://www.cnblogs.com:8080/

path          訪問資源的路徑

query-string  發送給http服務器的數據

anchor-       錨,這是一種超鏈接,只是頁面內部的超鏈接,如果網頁很長,而且里面的內容分為N個部分,這樣就可以在網頁頂部設置一個錨點,

                  方便瀏覽者點擊相應錨點,快速到達本頁面相應位置。

               URL中,錨點在最右邊,前面有一個字符“#”。


舉例:

http://www.mywebsite.com/sj/test/test.aspx?name=sviergn&x=true#stuff

Schema(協議):                 http
host(域名):                   www.mywebsite.com
path(資源路勁):               /sj/test/test.aspx
Query String(參數):           name=sviergn&x=true
Anchor(錨):                   stuff

http請求方法

http協議中定義了幾種不同的請求命令,這些命令叫做http方法(http  method)。

每個http請求報文中都包含一個方法,這個方法告訴服務器要執行什么動作。

一個URL地址用於描述一個網絡上的資源,而http中的get、post、put、delete就對應着這個資源的查、改、增、刪4個操作。

 

最常見的是get和post:

       get一般用於獲取/查詢資源信息;

       post一般用於更新資源信息;

 
         

Http協議定義了很多與服務器交互的方法,最基本的有4種,分別是GET,POST,PUT,DELETE.。

 
         

一個URL地址用於描述一個網絡上的資源,

 

而HTTP中的GET, POST, PUT, DELETE就對應着對這個資源的查,改,增,刪4個操作。

 
         

我們最常見的就是GET和POST了。GET一般用於獲取/查詢資源信息,而POST一般用於更新資源信息.



5種常見的http方法包括:

get:請求指定的頁面信息,並返回實體主體; head:類似於get請求,只不過返回的響應中,沒有具體的內容,用於獲取報頭; post:向指定資源提交數據進行請求(例如:提交表單或者上傳文件),數據被包含在請求體中。 post請求可能會導致新的資源的建立或對已有的資源的修改; put:從客戶端向服務器傳送的數據,取代指定文檔的內容; delete:請求服務器刪除指定的頁面;

get方法:用戶獲取資源,常用於向服務器查詢某些信息,一般打開網頁都是用get方法,因為要從web服務器獲取信息。

 

帶參數的get方法:

 

                                 瀏覽器可以在get方法中,把數據傳遞給服務器,數據放在URL的問號(?)后面。

                                 將查詢字符串參數追加到URL末尾,一遍將信息發送給服務器。這種方式叫做查詢字符串,或者叫query  string。

例如:百度搜索URL如下:

下面為get方法,並帶有參數

GET https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=sitehao123&wd=%E4%B8%AD%E5%9B

%BD&rsv_pq=ee5e88db00155eb1&rsv_t=9b46NVmtUvhHk8NuPqytTgFcpScJZfmNOSxhFBaAu5rlcjCsQ9PfON8N98xNepLuQQ&rqlang=cn&rsv_enter=0&rsv_dl=tb&rsv_sug3=10&rsv_sug1=1&rsv_sug7=00

1&prefixsug=%25E4%25B8%25AD%25E5%259B%25BD&rsp=8&rsv_sug9=es_0_1&inputT=10643&rsv_sug4=12203&rsv_sug=9 HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36
Sec-Fetch-User: ?1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: navigate
Referer: https://www.baidu.com/?tn=sitehao123&H123Tmp=nunew11
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: BIDUPSID=1655D38E3EB9FAF984C3D838C40375AC; PSTM=1564563068; BD_UPN=12314553; BAIDUID=8B7CDF0DBB1D8B4D8DC4288AE32C655B:FG=1; ispeed_lsm=2; MCITY=-%3A; 

BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BDSFRCVID=7AKsJeCCxG3e2tjwgnO1j79umibdsgZhD6873J; H_BDCLCKID_SF=tbAD_CKKf-3bfTuGDJOqKn0thxtX2bjMfbTf_p7F5l8-hCQXDPjf-n-shxTw-

lQCMJ7PBfQaKqcxOKQphPbm5nIXQ48qbpbjb2oiLInN3KJm_UK9bT3v5Duy-tQ42-biW2tH2Mbdax7P_IoG2Mn8M4bb3qOpBtQmJeTxoUJ25DnJhhCGe6D2e5Q3jNLsbtQb26r-3--8-bTVHRDk5-Qo-

4_eqxby26Pf0m3eaJ5n0-nnhnK45-6bbPCgDfCfqRQL2CrbQb3u2p--bK0Ry66jK4JKDG0tJ6OP; H_PS_PSSID=1469_21080_30211_30071_26350; H_PS_645EC=881dEMXJjSRsjFsceTvx5SWR2G

%2FilqMyfp6iGiw%2BDfeUUG0wTEM81HCuM8v1K4C3CQ; delPer=0; BD_CK_SAM=1; PSINO=5; BDSVRTM=113

注意:瀏覽器可以在get方法中把數據傳給服務器,數據放在URL的?后面;

     百度搜索中,查詢字符串以名=值這樣的形式出現,多個名值之間用&分隔開;

在fiddler中,使用webforms選項卡可以清楚的看到get方法中的字符串查詢參數:

 

 

 

 

post方法

post方法通常用來把表單中填好的數據發送給服務器。

post方法,數據放在body中,不會放在url中。

 

 

 

 

 

 

 

 

 

 

GET和POST的區別

GET和POST的區別:

1. GET提交的數據會放在URL之后,以?分割URL和傳輸數據,參數之間以&相連,如EditPosts.aspx?name=test1&id=123456POST方法是把提交的數據放在HTTP包的Body中. 2. GET提交的數據大小有限制(因為瀏覽器對URL的長度有限制),而POST方法提交的數據沒有限制.

3. GET方式需要使用Request.QueryString來取得變量的值,而POST方式通過Request.Form來獲取變量的值。 4. GET方式提交數據,會帶來安全問題,比如一個登錄頁面,通過GET方式提交數據時,用戶名和密碼將出現在URL上,

   如果頁面可以被緩存或者其他人可以訪問這台機器,就可以從歷史記錄獲得該用戶的賬號和密碼.

 

 

 

 

 

 

 

 

 

===================================================================================================================================

http狀態碼

http狀態碼:


每個http響應報文,都會攜帶一個狀態碼,用於告訴客戶端請求是否成功。狀態碼是一個3位數字的代碼。


http狀態碼存在於http的響應報文中,其作用是web服務器告訴客戶端發生了什么事。


http響應報文中的第一行,由http協議版本號、狀態碼、狀態消息3部分組成。

------------------------------------------------------------------------------------------------------------

Response 消息中的第一行叫做狀態行,由HTTP協議版本號, 狀態碼, 狀態消息 三部分組成。

狀態碼用來告訴HTTP客戶端,HTTP服務器是否產生了預期的Response.

HTTP/1.1中定義了5類狀態碼, 狀態碼由三位數字組成,第一個數字定義了響應的類別

1XX:提示信息 - 表示請求已被成功接收,繼續處理

2XX:成功 - 表示請求已被成功接收,理解,接受

3XX:重定向 - 要完成請求必須進行更進一步的處理

4XX:客戶端錯誤 -  請求有語法錯誤或請求無法實現

5XX:服務器端錯誤 -   服務器未能實現合法的請求

常見的狀態碼

一般人只需要了解以下常見的狀態碼就夠了, 如果你想了解更多, 請繼續往下看。

200               OK 服務器成功處理了請求(這個是我們見到最多的)
301/302        Moved Permanently(重定向)請求的URL已移走。Response中應該包含一個Location URL, 說明資源現在所處的位置
304               Not Modified(未修改)客戶的緩存資源是最新的, 要客戶端使用緩存
404               Not Found 未找到資源
501               Internal Server Error服務器遇到一個錯誤,使其無法對請求提供服務

 

 

 

 

其它詳細的狀態碼,詳細見其它參考博客。

 

 

 

 

 

2XX 成功狀態碼

客戶端發起請求時, 這些請求通常都是成功的。服務器有一組用來表示成功的狀態碼,分別對應於不同類型的請求。

狀態碼 狀態消息 含義  
200 OK 服務器成功處理了請求(這個是我們見到最多的)  
201 Created(已創建) 對於那些要服務器創建對象的請求來說,資源已創建完畢。  
202 Accepted(已接受) 請求已接受, 但服務器尚未處理  
203 Non-Authoritative Information(非權威信息) 服務器已將事務成功處理,只是實體Header包含的信息不是來自原始服務器,而是來自資源的副本。  
204 No Content(沒有內容) Response中包含一些Header和一個狀態行, 但不包括實體的主題內容(沒有response body)  
205 Reset Content(重置內容)  另一個主要用於瀏覽器的代碼。意思是瀏覽器應該重置當前頁面上所有的HTML表單。  
206 Partial Content(部分內容)  部分請求成功  

 

 

 

 

 

 

狀態碼:204(no  content,沒有內容):返回的響應中,只有一些header和一個狀態行,沒有實體的主題內容(沒有響應body)。

作用如下:

                  (1)在不獲取資源的情況下,了解資源的情況(比如判斷其類型)

                  (2)通過查看http響應中的狀態碼,查看某個對象是否存在。

                  (3)通過查看header測試資源是否被修改。

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

 

 

 

 

 

狀態碼:206(partial  content):代表服務器已經成功處理了部分GET請求(只有發送GET 方法的request, web服務器才可能返回206)

應用場景:

1. FlashGet, 迅雷或者HTTP下載工具都是使用206狀態碼來實現斷點續傳

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

 

實例: 一些流媒體技術比如在線視頻,可以邊看邊下載。 就是使用206來實現的。

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

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

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

 

 

 

 

 

3XX 重定向狀態碼

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

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

301和302 非常相似,  一個是永久轉移,一個是臨時轉移。  

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

302,303,307 是一樣。  這是因為302是HTTP 1.0定義的, HTTP1.1中使用303,307. 同時又保留了302.  (但在現實中,我們還是用302,我是沒見過303和307)

 

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

 

狀態碼 狀態消息 含義  
300 Multiple Choices(多項選擇)  客戶端請求了實際指向多個資源的URL。這個代碼是和一個選項列表一起返回的,然后用戶就可以選擇他希望的選項了  
301 Moved Permanently(永久移除) 請求的URL已移走。Response中應該包含一個Location URL, 說明資源現在所處的位置  
302 Found(已找到) 與狀態碼301類似。但這里的移除是臨時的。 客戶端會使用Location中給出的URL,重新發送新的HTTP request  
303  See Other(參見其他) 類似302  
304 Not Modified(未修改) 客戶的緩存資源是最新的, 要客戶端使用緩存  
305  Use Proxy(使用代理) 必須通過代理訪問資源, 代理的地址在Response 的Location中  
306  未使用  這個狀態碼當前沒使用  
307 Temporary Redirect(臨時重定向 類似302  

 

 

 

 

 

 

 

 

 


狀態碼:301(moved  permanently):表示網頁已經永久性的轉移到另外一個地址。

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

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

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

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

 

 

 

 

 

狀態碼:302(found):當我們訪問一個url的時候,服務器要我們訪問另外一個資源,這個時候瀏覽器會繼續發一個http,請求訪問新的資源。

重定向,新的URL會在response 中的Location中返回,瀏覽器將會自動使用新的URL發出新的Request

例如在IE中輸入, http://www.google.com. HTTP服務器會返回302, IE取到Response中Location header的新URL, 又重新發送了一個Request.

 

 

 

301和302在語法上是一模一樣的,都是在location中返回新的url。區別在於: (1)、301表示舊地址的資源已經被永久的移除了(這個資源不可訪問了),
搜索引擎會把權重算到新的地址; (
2)、302表示舊地址的資源還在(仍然可以訪問),這個重定向只是臨時的從舊地址跳轉到新地址,
搜索引擎會把權重算到舊的地址;

 

 

 

 

 

狀態碼:304 (Not Modified):代表上次的文檔已經被緩存了, 還可以繼續使用

例如打開博客園首頁, 發現很多Response 的status code 都是304

提示: 如果你不想使用本地緩存可以用Ctrl+F5 強制刷新頁面

 

 

 

 

 

4XX客戶端錯誤狀態碼

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

狀態碼 狀態消息 含義  
400 Bad Request(壞請求) 告訴客戶端,它發送了一個錯誤的請求。  
401 Unauthorized(未授權) 需要客戶端對自己認證  
402 Payment Required(要求付款) 這個狀態還沒被使用, 保留給將來用  
403 Forbidden(禁止) 請求被服務器拒絕了  
404 Not Found(未找到) 未找到資源  
405 Method Not Allowed(不允許使用的方法) 不支持該Request的方法。  
406 Not Acceptable(無法接受)    
407 Proxy Authentication Required(要求進行代理認證) 與狀態碼401類似, 用於需要進行認證的代理服務器  
408 Request Timeout(請求超時)  如果客戶端完成請求時花費的時間太長, 服務器可以回送這個狀態碼並關閉連接  
409 Conflict(沖突) 發出的請求在資源上造成了一些沖突  
410 Gone(消失了) 服務器曾經有這個資源,現在沒有了, 與狀態碼404類似  
411 Length Required(要求長度指示) 服務器要求在Request中包含Content-Length。  
412 Precondition Failed(先決條件失敗)    
413 Request Entity Too Large(請求實體太大) 客戶端發送的實體主體部分比服務器能夠或者希望處理的要大  
414 Request URI Too Long(請求URI太長) 客戶端發送的請求所攜帶的URL超過了服務器能夠或者希望處理的長度  
415 Unsupported Media Type(不支持的媒體類型) 服務器無法理解或不支持客戶端所發送的實體的內容類型  
416 Requested Range Not Satisfiable(所請求的范圍未得到滿足)    
417 Expectation Failed(無法滿足期望)  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

400 Bad Request(壞請求)

發送的Request中的數據有錯誤(比如:表單有錯誤,Cookie有錯誤),  這個我們也經常見到。

 

 

 

 

401(unauthorized)(未授權錯誤)

有些網頁采用的是http基本認證(basic  authentication),所以需要在http請求中帶上authorization  header,否則服務器會返回狀態碼401

 

 

 

403 Forbidden(禁止)

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

訪問下面的URL, 會被服務器拒絕. 並且返回403狀態碼

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中的方法。

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

實例:  發送一個是trace方法的Request 給www.google.com

 

 

 

 

411 Length Required(要求長度指示)

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

當瀏覽器使用Post方法,發送數據給Web服務器時, 必須要有Content-Length。這樣Web服務器才知道你要發送多少數據,否則Web服務器會返回411狀態碼

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

 

 

 

 

 

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

作用:客戶端發送的實體主體部分比服務器能夠或者希望處理的要大。  一般情況下我們看不到這個狀態碼。 因為瀏覽器不會發送太大的數據給網站,但是機器人可能會。

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

 

 

 

 

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

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

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

 

 

 

 

 

 

5XX服務器錯誤狀態碼

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

 

狀態碼 狀態消息 含義  
500 Internal Server Error(內部服務器錯誤) 服務器遇到一個錯誤,使其無法為請求提供服務  
501 Not Implemented(未實現) 客戶端發起的請求超出服務器的能力范圍(比如,使用了服務器不支持的請求方法)時,使用此狀態碼。  
502 Bad Gateway(網關故障) 代理使用的服務器遇到了上游的無效響應  
503 Service Unavailable(未提供此服務) 服務器目前無法為請求提供服務,但過一段時間就可以恢復服務  
504 Gateway Timeout(網關超時) 與狀態嗎408類似, 但是響應來自網關或代理,此網關或代理在等待另一台服務器的響應時出現了超時  
505 HTTP Version Not Supported(不支持的HTTP版本) 服務器收到的請求使用了它不支持的HTTP協議版本。 有些服務器不支持HTTP早期的HTTP協議版本,也不支持太高的協議版本  

 

 

 

 

 

 

 

 

 

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

這個太常見了, 我們開發網站的時候,當我們的程序出錯了時,就會返回500錯誤。

實例:ASP.NET 程序出錯

 

 

 

 

 

501 Not Implemented(未實現)

客戶端發起的請求超出服務器的能力范圍(比如,使用了服務器不支持的請求方法)時,使用此狀態碼)。  一般的Web服務器只支持GET和POST方法。

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

 

 

 

 

 

502 Bad Gateway(網關故障)

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

Fiddler本身就是代理服務器。  當我們訪問www.facebook.com,這網站被我們天朝屏蔽了。 所以我們可以得到502

 

 

 

 

 

503(server  unavailable)(服務器暫時不可用)

由於服務器維護或者過載,服務器當前無法處理請求;這個狀況是臨時的,並且將在一段時間以后恢復。

 

 

 

 

 

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

表示Web服務器不支持此HTTP協議的版本。  

眾所周知我們現在使用的HTTP協議版本是HTTP/1.1, 如果我們發送一個HTTP/2.0 的request 給博客園, 博客園肯定不能支持HTTP/2.0,所以會返回505 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM