簡單介紹
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%20Ajaxpublisher=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-8f=8rsv_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種請求方法,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!
您可能感興趣的文章:- 詳解java實現HTTP請求的三種方式
- Android小知識之OkHttp的2種請求方式詳解
- 淺談PHP發送HTTP請求的幾種方式
- MVC 5限制所有HTTP請求必須是POST方式
- java發送http get請求的兩種方式
- python通過get,post方式發送http請求和接收http響應的方法
- c++實現發送http請求通過get方式獲取網頁源代碼