1. 程式人生 > >HTTP 8種請求方式介紹

HTTP 8種請求方式介紹

簡單介紹

HTTP是超文字傳輸協議,其定義了客戶端與伺服器端之間文字傳輸的規範。HTTP預設使用80埠,這個埠指的是服務端的埠,而客戶端使用的埠是動態分配的。當我們沒有指定埠訪問時,瀏覽器會預設幫我們新增80埠。我們也可以自己指定訪問埠如:http://www.ip138.com:80。 需要注意的是,現在大多數訪問都使用了HTTPS協議,而HTTPS的預設埠為443,如果使用80埠訪問HTTPS協議的伺服器可能會被拒絕。

 

HTTP請求的方法:

HTTP/1.1協議中共定義了八種方法(有時也叫“動作”),來表明Request-URL指定的資源不同的操作方式

HTTP1.0定義了三種請求方法: GET, POST 和 HEAD方法。

HTTP1.1新增了五種請求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法

 

1、OPTIONS 返回伺服器針對特定資源所支援的HTTP請求方法,也可以利用向web伺服器傳送‘*’的請求來測試伺服器的功能性 2、HEAD 向伺服器索與GET請求相一致的響應,只不過響應體將不會被返回。這一方法可以再不必傳輸整個響應內容的情況下,就可以獲取包含在響應小訊息頭中的元資訊。 3、GET 向特定的資源發出請求。注意:GET方法不應當被用於產生“副作用”的操作中,例如在Web Application中,其中一個原因是GET可能會被網路蜘蛛等隨意訪問。Loadrunner中對應get請求函式:web_link和web_url 4、POST 向指定資源提交資料進行處理請求(例如提交表單或者上傳檔案)。資料被包含在請求體中。POST請求可能會導致新的資源的建立和/或已有資源的修改。 Loadrunner中對應POST請求函式:web_submit_data,web_submit_form 5、PUT 向指定資源位置上傳其最新內容 6、DELETE 請求伺服器刪除Request-URL所標識的資源 7、TRACE 回顯伺服器收到的請求,主要用於測試或診斷 8、CONNECT HTTP/1.1協議中預留給能夠將連線改為管道方式的代理伺服器。 注意: 1)方法名稱是區分大小寫的,當某個請求所針對的資源不支援對應的請求方法的時候,伺服器應當返回狀態碼405(Mothod Not Allowed);當伺服器不認識或者不支援對應的請求方法時,應返回狀態碼501(Not Implemented)。 2)HTTP伺服器至少應該實現GET和HEAD/POST方法,其他方法都是可選的,此外除上述方法,特定的HTTP伺服器支援擴充套件自定義的方法。

HTTP工作原理

HTTP協議定義Web客戶端如何從Web伺服器請求Web頁面,以及伺服器如何把Web頁面傳送給客戶端。HTTP協議採用了請求/響應模型。客戶端向伺服器傳送一個請求報文,請求報文包含請求的方法、URL、協議版本、請求頭部和請求資料。伺服器以一個狀態行作為響應,響應的內容包括協議的版本、成功或者錯誤程式碼、伺服器資訊、響應頭部和響應資料。

 HTTP 請求/響應的步驟:

客戶端連線到Web伺服器->傳送Http請求->伺服器接受請求並返回HTTP響應->釋放連線TCP連線->客戶端瀏覽器解析HTML內容

1、客戶端連線到Web伺服器

一個HTTP客戶端,通常是瀏覽器,與Web伺服器的HTTP埠(預設為80)建立一個TCP套接字連線。例如,http://www.baidu.com

2、傳送HTTP請求

通過TCP套接字,客戶端向Web伺服器傳送一個文字的請求報文,一個請求報文由請求行、請求頭部、空行和請求資料4部分組成。

3、伺服器接受請求並返回HTTP響應

Web伺服器解析請求,定位請求資源。伺服器將資源複本寫到TCP套接字,由客戶端讀取。一個響應由狀態行、響應頭部、空行和響應資料4部分組成。

4、釋放連線TCP連線

若connection 模式為close,則伺服器主動關閉TCP連線,客戶端被動關閉連線,釋放TCP連線;若connection 模式為keepalive,則該連線會保持一段時間,在該時間內可以繼續接收請求;

5、客戶端瀏覽器解析HTML內容

客戶端瀏覽器首先解析狀態行,查看錶明請求是否成功的狀態程式碼。然後解析每一個響應頭,響應頭告知以下為若干位元組的HTML文件和文件的字符集。客戶端瀏覽器讀取響應資料HTML,根據HTML的語法對其進行格式化,並在瀏覽器視窗中顯示。

HTTP請求訊息Request

客戶端傳送一個HTTP請求到伺服器的請求訊息包括以下格式

請求行(request line)、請求頭部(header)、空行和請求資料四個部分組成。

請求行以一個方法符號開頭,以空格分開,後面跟著請求的URI和協議的版本
Get請求例子,使用Charles抓取的request:
GET /562f25980001b1b106000338.jpg HTTP/1.1
Host    img.mukewang.com
User-Agent    Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36
Accept    image/webp,image/*,*/*;q=0.8
Referer    http://www.imooc.com/
Accept-Encoding    gzip, deflate, sdch
Accept-Language    zh-CN,zh;q=0.8
第一部分:請求行,用來說明請求型別,要訪問的資源以及所使用的HTTP版本.

GET說明請求型別為GET,[/562f25980001b1b106000338.jpg]為要訪問的資源,該行的最後一部分說明使用的是HTTP1.1版本。

第二部分:請求頭部,緊接著請求行(即第一行)之後的部分,用來說明伺服器要使用的附加資訊

從第二行起為請求頭部,HOST將指出請求的目的地.User-Agent,伺服器端和客戶端指令碼都能訪問它,它是瀏覽器型別檢測邏輯的重要基礎.該資訊由你的瀏覽器來定義,並且在每個請求中自動傳送等等

第三部分:空行,請求頭部後面的空行是必須的

即使第四部分的請求資料為空,也必須有空行。

第四部分:請求資料也叫主體,可以新增任意的其他資料。

這個例子的請求資料為空。

POST請求例子,使用Charles抓取的request:
POST / HTTP1.1
Host:www.wrox.com
User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)
Content-Type:application/x-www-form-urlencoded
Content-Length:40
Connection: Keep-Alive

name=Professional%20Ajax&publisher=Wiley

第一部分:請求行,第一行明瞭是post請求,以及http1.1版本。
第二部分:請求頭部,第二行至第六行。
第三部分:空行,第七行的空行。
第四部分:請求資料,第八行。

HTTP請求訊息Response

一般情況下,伺服器接收並處理客戶端發過來的請求後會返回一個HTTP的響應訊息。

HTTP響應也由四個部分組成,分別是:狀態行、訊息報頭、空行和響應正文

 

例子

HTTP/1.1 200 OK
Date: Fri, 22 May 2009 06:07:21 GMT
Content-Type: text/html; charset=UTF-8

<html>
      <head></head>
      <body>
            <!--body goes here-->
      </body>
</html>
第一部分:狀態行,由HTTP協議版本號, 狀態碼, 狀態訊息 三部分組成。

第一行為狀態行,(HTTP/1.1)表明HTTP版本為1.1版本,狀態碼為200,狀態訊息為(ok)

第二部分:訊息報頭,用來說明客戶端要使用的一些附加資訊

第二行和第三行為訊息報頭,
Date:生成響應的日期和時間;Content-Type:指定了MIME型別的HTML(text/html),編碼型別是UTF-8

第三部分:空行,訊息報頭後面的空行是必須的
第四部分:響應正文,伺服器返回給客戶端的文字資訊。

空行後面的html部分為響應正文。

請求返回狀態碼:

200 OK  當您的操作將在響應正文中返回資料時,出現此結果。

204 No Content 當您的操作成功,但不在響應正文中返回資料時,出現此結果。

304 Not Modified(重定向)  當測試實體自上次檢索以來是否被修改時,出現此結果。

403 Forbidden   客戶端錯誤

401 Unauthorized 客戶端錯誤

413 Payload Too Large(客戶端錯誤) 當請求長度過長時,出現此結果。

400 BadRequest(客戶端錯誤) 當引數無效時,出現此結果。

404 Not Found(客戶端錯誤) 當資源不存在時,出現此結果。

405 Method Not Allowed(客戶端錯誤)由於方法和資源組合不正確而出現此錯誤。 例如,您不能對一個實體集合使用 DELETE 或 PATCH。

412 Precondition Failed  客戶端錯誤

501 Not Implemented(伺服器錯誤) 當未實施某個請求的操作時,出現此結果。

503 Service Unavailable(伺服器錯誤) 當 Web API 服務不可用時,出現此結果。

GET與POST:

 “get”方法提交的資料會直接填充在請求報文的URL上,如“ https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1 ”   “?”問號劃分域名和get提交的引數,A=B中的A是引數名,B是引數值,多個引數之間用&進行分割,如果引數值是中文,則會轉換成諸如%ab%12加密16進位制碼。一般來說,瀏覽器處理的URL最大限度長度為1024B(不同瀏覽器不一樣),所以GET方法提交引數長度有限制。

        “post”方法提交的資料會附在正文上,一般請求正文的長度是沒有限制的,但表單中所能處理的長度一般為100k(不同協議不同瀏覽器不一樣),而且需要考慮下層報文的傳輸效率,不推薦過長。

        所以GET方法可以用來傳輸一些可以公開的引數資訊,解析也比較方便,如百度的搜尋的關鍵詞,而POST方法可以用來提交一個使用者的敏感資訊(如果不使用HTTPS加密,報文正文仍舊是明文,容易被人截獲讀取)

主要特點

1、無連線

無連線的含義是限制每次連線只處理一個請求。伺服器處理完客戶的請求,並收到客戶的應答後,即斷開連線。採用這種方式可以節省傳輸時間。

2、無狀態

HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味著如果後續處理需要前面的資訊,則它必須重傳,這樣可能導致每次連線傳送的資料量增大。另一方面,在伺服器不需要先前資訊時它的應答就較快。

 3、簡單快速

客戶向伺服器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GET、HEAD、POST。每種方法規定了客戶與伺服器聯絡的型別不同。由於HTTP協議簡單,使得HTTP伺服器的程式規模小,因而通訊速度很快。

4、靈活

HTTP允許傳輸任意型別的資料物件。正在傳輸的型別由Content-Type加以標記。

5、支援B/S及C/S模式