HTTP內(nèi)容說明
請(qǐng)求報(bào)文
一個(gè)HTTP請(qǐng)求報(bào)文由請(qǐng)求行(request line)、請(qǐng)求頭部(header)、空行和請(qǐng)求數(shù)據(jù)
4個(gè)部分組成,
請(qǐng)求報(bào)文的一般格式
<request-line>
<headers>
<blank line>
<request-body>
1、第一行必須是一個(gè)請(qǐng)求行(request-line),用來說明請(qǐng)求類型,要訪問的資源以及所使用的HTTP版本
2、緊接著是一個(gè)請(qǐng)求頭(header),用來說明服務(wù)器要使用的附加信息
3、緊接著是一個(gè)空行(blank line)
4、緊接著是請(qǐng)求體(request-body)
request請(qǐng)求,例如:
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
請(qǐng)求行(request line)
請(qǐng)求行由請(qǐng)求方法字段
、URL字段
和HTTP協(xié)議版本
字段3個(gè)字段組成,它們用空格分隔
例如:GET /index.html HTTP/1.1
。
- GET說明請(qǐng)求類型為GET,
- /index.html為要訪問的資源,
- 最后一部分說明使用的是HTTP1.1版本
請(qǐng)求頭部(header)
緊接著請(qǐng)求行(即第一行)之后的部分,用來說明服務(wù)器要使用的附加信息
從第二行起為請(qǐng)求頭部,
- HOST將指出請(qǐng)求的目的地.
- User-Agent,服務(wù)器端和客戶端腳本都能訪問它,它是瀏覽器類型檢測(cè)邏輯的重要基礎(chǔ),該信息由你的瀏覽器來定義,并且在每個(gè)請(qǐng)求中自動(dòng)發(fā)送等等
空行
即使第四部分的請(qǐng)求數(shù)據(jù)為空,也必須有空行。
,通知服務(wù)器以下不再有請(qǐng)求頭
請(qǐng)求數(shù)據(jù)
請(qǐng)求數(shù)據(jù)不在GET方法中使用,而是在POST方法中使用
,因?yàn)樯厦娴呐e例中是使用的GET,所以并沒有請(qǐng)求數(shù)據(jù)
請(qǐng)求數(shù)據(jù)舉例
舉例1
有請(qǐng)求數(shù)據(jù)的舉例如下:
與請(qǐng)求數(shù)據(jù)相關(guān)的最常使用的請(qǐng)求頭是
-
Content-Type:指示響應(yīng)的內(nèi)容,這里是text/html表示HTML網(wǎng)頁,
瀏覽器就是依靠Content-Type來判斷響應(yīng)的內(nèi)容是網(wǎng)頁還是圖片,是視頻還是音樂。瀏覽器并不靠URL來判斷響應(yīng)的內(nèi)容,所以,即使URL是http://example.com/abc.jpg,它也不一定就是圖片
例如:Content-Type: text/html;charset=utf-8表示響應(yīng)類型是HTML文本,并且編碼是UTF-8,Content-Type: image/jpeg表示響應(yīng)類型是JPEG格式的圖片;
-
Content-Length。
舉例2
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
第一部分:請(qǐng)求行,第一行明了是post請(qǐng)求,以及http1.1版本。
第二部分:請(qǐng)求頭部,第二行至第六行。
第三部分:空行,第七行的空行。
第四部分:請(qǐng)求數(shù)據(jù),第八行。
響應(yīng)報(bào)文
HTTP響應(yīng)也由四個(gè)部分組成,分別是:狀態(tài)行、消息報(bào)頭、空行和響應(yīng)正文
。
<status-line>
<headers>
<blank line>
[<response-body>]
1、第一行必須是一個(gè)狀態(tài)行(status-line)
2、緊接著是一個(gè)響應(yīng)頭(header)
3、緊接著是一個(gè)空行(blank line)
4、緊接著是響應(yīng)體(response-body)
response響應(yīng)舉例如下:
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>
狀態(tài)行(status-line)
狀態(tài)行:由HTTP協(xié)議版本號(hào), 狀態(tài)碼, 狀態(tài)消息
三部分組成
第一行為狀態(tài)行,
- (HTTP/1.1)表明HTTP版本為1.1版本,
- 狀態(tài)碼為200,
- 狀態(tài)消息為(ok)
消息報(bào)頭(header)
第二行和第三行為消息報(bào)頭,
- Date:生成響應(yīng)的日期和時(shí)間;
- Content-Type:指定了MIME類型的HTML(text/html),編碼類型是UTF-8
空行(blank line)
消息報(bào)頭后面的空行是必須的
響應(yīng)正文(response-body)
空行后面的html部分為響應(yīng)正文。
HTTP請(qǐng)求方式
GET
GET /test/?!name=Professional?abc!&publisher=?abc HTTP/1.1
Accept: */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
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)
Host: 127.0.0.1
Connection: Keep-Alive
注意最后一行是空行
說明:
-
第1部分是請(qǐng)求行
,說明了該請(qǐng)求是一個(gè)GET請(qǐng)求。該行的第二部分,用來說明請(qǐng)求的是什么,該行的最后一部分說明使用的是HTTP1.1版本。 -
第2部分請(qǐng)求頭
,HOST將指出請(qǐng)求的目的地,User-Agent,服務(wù)器端和客戶端腳本都能訪問它,它是瀏覽器類型檢測(cè)邏輯的重要基礎(chǔ)。該信息由你的瀏覽器來定義,并且在每個(gè)請(qǐng)求中自動(dòng)發(fā)送,Connection通常將瀏覽器操作設(shè)置為Keep-Alive,而沒有響應(yīng)后立即close這個(gè)連接。 -
第3部分是空行
,即使不存在請(qǐng)求主體,這個(gè)空行也是必需的。
GET提交,請(qǐng)求的數(shù)據(jù)會(huì)附在URL之后(就是把數(shù)據(jù)放置在HTTP協(xié)議頭中),以?分割URL和傳輸數(shù)據(jù),多個(gè)參數(shù)用&連接
如果數(shù)據(jù)是英文字母/數(shù)字,原樣發(fā)送,如果是空格,轉(zhuǎn)換為+,如果是中文/其他字符,則直接把字符串用BASE64加密,得出如: %E4%BD%A0%E5%A5%BD,其中%XX中的XX為該符號(hào)以16進(jìn)制表示的ASCII。
POST
POST /text.html 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?abc!%20Ajax&publisher=?abc!
把提交的數(shù)據(jù)放置在是HTTP包的包體中
說明:
- 請(qǐng)求行開始處的GET改為POST,以表示不同的請(qǐng)求類型。
- Content-Type說明了請(qǐng)求主體的內(nèi)容是如何編碼的,瀏覽器始終以application/x-www-form-urlencoded的格式編碼來傳送數(shù)據(jù),這是針對(duì)簡(jiǎn)單URL編碼的MIME類型.Content-Length說明了請(qǐng)求主體的字節(jié)數(shù)。
- 最后請(qǐng)求主體.名稱-值對(duì)的形式
區(qū)別
GET提交的數(shù)據(jù)會(huì)放在URL之后,以?分割URL和傳輸數(shù)據(jù),參數(shù)之間以&相連,如上. POST方法是把提交的數(shù)據(jù)放在HTTP包的Body中.
GET提交的數(shù)據(jù)大小有限制(因?yàn)闉g覽器對(duì)URL的長(zhǎng)度有限制),而POST方法提交的數(shù)據(jù)沒有限制.
GET方式需要使用Request.QueryString來取得變量的值,而POST方式通過Request.Form來獲取變量的值。
GET方式提交數(shù)據(jù),會(huì)帶來安全問題,比如一個(gè)登錄頁面,通過GET方式提交數(shù)據(jù)時(shí),用戶名和密碼將出現(xiàn)在URL上,如果頁面可以被緩存或者其他人可以訪問這臺(tái)機(jī)器,就可以從歷史記錄獲得該用戶的賬號(hào)和密碼.
http的請(qǐng)求體body的幾種數(shù)據(jù)格式
multipart/form-data
以表單形式提交,主要是上傳文件用它
application/x-www-from-urlencoded
以鍵值對(duì)的數(shù)據(jù)格式提交
raw
選擇text,則請(qǐng)求頭是: text/plain
選擇javascript,則請(qǐng)求頭是: application/javascript
選擇json,則請(qǐng)求頭是: application/json (如果想以json格式傳參,就用raw+json就行了)
選擇html,則請(qǐng)求頭是: text/html
選擇application/xml,則請(qǐng)求頭是: application/xml
binary
相當(dāng)于Content-Type:application/octet-stream,從字面意思得知,只可以上傳二進(jìn)制數(shù)據(jù),通常用來上傳文件,由于沒有鍵值,所以,一次只能上傳一個(gè)文件。
postman中 Params和Body的區(qū)別
Params 它會(huì)將參數(shù)放入url的?后面提交到后臺(tái)(帶到請(qǐng)求的接口鏈接里)
Body是放在請(qǐng)求體里面
參考:https://www.cnblogs.com/ranyonsue/p/5984001.html文章來源:http://www.zghlxwxcb.cn/news/detail-432964.html
參考2:https://blog.csdn.net/qq_41063141/article/details/101505956文章來源地址http://www.zghlxwxcb.cn/news/detail-432964.html
到了這里,關(guān)于http請(qǐng)求和響應(yīng)格式說明,http的get和post請(qǐng)求方式說明,http的請(qǐng)求體body的幾種數(shù)據(jù)格式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!