簡單介紹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_url4、POST向指定資源提交數據進行處理請求(例如提交表單或者上傳文件)。數據被包含在請求體中。POST請求可能會導致新的資源的建立和/或已有資源的修改。 Loadrunner中對應POST請求函數:

web_submit_data,web_submit_form5、PUT向指定資源位置上傳其最新內容6、DELETE請求服務器刪除Request-URL所標識的資源7、TRACE回顯服務器收到的請求,主要用於測試或診斷8、CONNECTHTTP/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部分爲響應正文。

請求返回狀態碼:

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

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

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

403Forbidden 客戶端錯誤

401Unauthorized客戶端錯誤

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

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

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

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

412Precondition Failed 客戶端錯誤

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

503Service 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模式

作業:瞭解 HTTP 協議的基本知識,包括請求流程、請求方法等

  http是超文本傳輸協議,默認端口號爲80,客戶端是動態的,瀏覽器會自動默認爲80

  https默認端口號爲443

  請求方法8種

  get、post、put、delete、options、trace、connect、head

  請求流程2種分爲request和response,但是他們的流程都是相同的,一個請求一個接收

  流程爲:狀態行、消息報頭、空行和響應正文

  請求響應步驟:

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

總結

以上所述是小編給大家介紹的HTTP請求方式中8種請求方法,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回覆大家的!

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