文章作者:Tyan
博客:noahsnail.com | CSDN | 簡(jiǎn)書(shū)
1. HTTP報(bào)文
HTTP報(bào)文是由一行一行的簡(jiǎn)單字符串組成的。HTTP報(bào)文都是純文本营罢,不是二進(jìn)制代碼,所以人們可以很方便地對(duì)其進(jìn)行讀寫(xiě)肪凛。下圖是一個(gè)例子:
從Web客戶端發(fā)往Web服務(wù)器的HTTP報(bào)文稱為請(qǐng)求報(bào)文(request message)劳景。從服務(wù)器發(fā)往客戶端的報(bào)文稱為響應(yīng)報(bào)文(response message),此外沒(méi)有其他類型的HTTP報(bào)文配紫。HTTP請(qǐng)求和響應(yīng)報(bào)文的格式很類似。
HTTP 報(bào)文包括以下三個(gè)部分:
起始行
報(bào)文的第一行就是起始行,在請(qǐng)求報(bào)文中用來(lái)說(shuō)明要做些什么,在響應(yīng)報(bào)文中說(shuō)明出現(xiàn)了什么情況趋艘。首部字段
起始行后面有零個(gè)或多個(gè)首部字段疲恢。每個(gè)首部字段都包含一個(gè)名字和一個(gè)值,為了便于解析,兩者之間用冒號(hào)(:)來(lái)分隔凶朗。首部以一個(gè)空行結(jié)束瓷胧。添加一個(gè)首部字段和添加新行一樣簡(jiǎn)單。主體
空行之后就是可選的報(bào)文主體了,其中包含了所有類型的數(shù)據(jù)棚愤。請(qǐng)求主體中包括 了要發(fā)送給 Web 服務(wù)器的數(shù)據(jù);響應(yīng)主體中裝載了要返回給客戶端的數(shù)據(jù)搓萧。起始行和首部都是文本形式且都是結(jié)構(gòu)化的,而主體則不同,主體中可以包含任意 的二進(jìn)制數(shù)據(jù)(比如圖片、視頻宛畦、音軌瘸洛、軟件程序)。當(dāng)然,主體中也可以包含 文本次和。
2. HTTP請(qǐng)求報(bào)文
GET / HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8,en;q=0.6
Cookie: BAIDUID=4082549DEE5E64678FC46642E185D98C:FG=1; BIDUPSID=4082549DEE5E64678FC46642E185D98C; PSTM=1472215668; MCITY=-%3A; BDSFRCVID=pSFsJeCCxG3C4A5iySIze8tzxQmzvLxREDct3J; H_BDCLCKID_SF=tR38LRu8KJjEe-Kk-PnVeUFLQlbZKxJmMgkeWlbMQnTR85CGXUQVWx4_Qb6gXU-L5nT9bDOFfDL2bKKmjTL3K4LOMq5-5b0X-K5L3JD8bnjoHRjvq4bohjPy5G7eBtQm05bxohOIHRoE8M0m2ROkMtutKJjQW-nQ5HbbhCLbWDF5MIDGj50WenLHMfnXetJQ2C7WsJceHJOoDDvx0Uj5y4LdLp7xJMtJ0RT0XxOYMJKWf-c90tc05xAb04oR5b0eWJQ2QJ8BtCtKhD3P; pgv_pvi=7232093184; pgv_si=s9982430208; BDRCVFR[IzI_eUGSZP3]=mbxnW11j9Dfmh7GuZR8mvqV; BD_CK_SAM=1; PSINO=5; BD_HOME=0; H_PS_PSSID=1421_17946_21125_18559_21455_21419_21394_21378_21191_21398; BD_UPN=123253; BD_LAST_QID=17716714193052416912
解釋:
GET / HTTP/1.1反肋,請(qǐng)求起始行
GET,請(qǐng)求方法
/踏施,請(qǐng)求URL石蔗,命名了所請(qǐng)求資源,或者URL路徑組件的完整URL。如果直接與服務(wù)器進(jìn)行對(duì)話,只要URL的路徑組件是資源的絕對(duì)路徑,通常就不會(huì)有什么問(wèn)題——服務(wù)器可以假定自己是URL的主機(jī)/端口畅形。
HTTP/1.1养距,請(qǐng)求采用的協(xié)議及版本號(hào)
Host,請(qǐng)求的服務(wù)器
Connection日熬,連接方式
Upgrade-Insecure-Requests棍厌,
User-Agent,將發(fā)起請(qǐng)求的應(yīng)用程序名稱告知服務(wù)器
Accept竖席,請(qǐng)求首部耘纱,是請(qǐng)求報(bào)文特有的。它們?yōu)榉?wù)器提供了一些額外信息,比如客戶端希望接收什么類型的數(shù)據(jù)毕荐。例子中接收html束析,xhtml,xml等數(shù)據(jù)东跪。
Accept-Encoding畸陡,告訴服務(wù)器能夠發(fā)送哪些編碼方式
Accept-Language鹰溜,告訴服務(wù)器能夠發(fā)送哪些語(yǔ)言
Cookie,Cookie信息丁恭,客戶端用它向服務(wù)器傳送一個(gè)令牌——它并不是真正的安全首部,但確實(shí)隱含了安全功能
3. HTTP響應(yīng)報(bào)文
$ curl -I www.baidu.com
HTTP/1.1 200 OK
Server: bfe/1.0.8.18
Date: Thu, 03 Nov 2016 08:30:43 GMT
Content-Type: text/html
Content-Length: 277
Last-Modified: Mon, 13 Jun 2016 02:50:03 GMT
Connection: Keep-Alive
ETag: "575e1f5b-115"
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Pragma: no-cache
Accept-Ranges: bytes
解釋:
HTTP/1.1 200 OK曹动,響應(yīng)狀態(tài)行
HTTP/1.1,訪問(wèn)采用的協(xié)議為HTTP牲览,版本為1.1
200墓陈,HTTP狀態(tài)碼,表示文檔正確返回
OK第献,一個(gè)描述性的原因短語(yǔ)
Server贡必,服務(wù)器應(yīng)用程序軟件的名稱和版本
Date,服務(wù)器產(chǎn)生響應(yīng)的日期
Content-Type庸毫,實(shí)體中所承載對(duì)象的類型仔拟,例子中響應(yīng)實(shí)體的主體是一個(gè)html文本。
Content-Length飒赃,所傳送實(shí)體主體的長(zhǎng)度或大小利花,例子中響應(yīng)實(shí)體的主體包含了277字節(jié)的數(shù)據(jù)
Last-Modified,資源的最后修改日期時(shí)間
Connection载佳,連接方式炒事,close或keep-alive
ETag,資源的匹配信息
Cache-Control蔫慧,控制緩存的行為
Pragma挠乳,報(bào)文指令
Accept-Ranges金句,是否接受字節(jié)范圍請(qǐng)求