1.HTTP工作原理
HTTP協(xié)議工作于客戶端-服務(wù)端架構(gòu)上艘蹋。瀏覽器作為HTTP客戶端通過(guò)URL向HTTP服務(wù)端即WEB服務(wù)器發(fā)送所有請(qǐng)求筑辨。
Web服務(wù)器根據(jù)接收到的請(qǐng)求后味廊,向客戶端發(fā)送響應(yīng)信息钱雷。
HTTP默認(rèn)端口號(hào)為80节猿,但是你也可以改為其他端口票从。
HTTP三點(diǎn)注意事項(xiàng):
HTTP是無(wú)連接:無(wú)連接的含義是限制每次連接只處理一個(gè)請(qǐng)求。服務(wù)器處理完客戶的請(qǐng)求滨嘱,并收到客戶的應(yīng)答后峰鄙,即斷開連接。采用這種方式可以節(jié)省傳輸時(shí)間太雨。
HTTP是媒體獨(dú)立的:這意味著吟榴,只要客戶端和服務(wù)器知道如何處理的數(shù)據(jù)內(nèi)容,任何類型的數(shù)據(jù)都可以通過(guò)HTTP發(fā)送囊扳》苑客戶端以及服務(wù)器指定使用適合的MIME-type內(nèi)容類型。
HTTP是無(wú)狀態(tài):HTTP協(xié)議是無(wú)狀態(tài)協(xié)議锥咸。無(wú)狀態(tài)是指協(xié)議對(duì)于事務(wù)處理沒(méi)有記憶能力狭瞎。缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息,則它必須重傳搏予,這樣可能導(dǎo)致每次連接傳送的數(shù)據(jù)量增大熊锭。另一方面,在服務(wù)器不需要先前信息時(shí)它的應(yīng)答就較快雪侥。
2.HTTP請(qǐng)求的格式
HTTP一般有四部分組成碗殷,請(qǐng)求行、請(qǐng)求頭部速缨、空行锌妻、請(qǐng)求數(shù)據(jù)(其中請(qǐng)求數(shù)據(jù)部分可以為空),請(qǐng)求格式如下:
第一部分 動(dòng)詞 路徑 協(xié)議/版本
第二部分 Key1: value1
第二部分 Key2: value2
第二部分 Key3: value3
第二部分 Content-Type: text/html
第二部分 Host: www.baidu.com
第二部分 User-Agent: curl/7.54.0
第三部分
第四部分 要上傳的數(shù)據(jù)
其中旬牲,第一部分為請(qǐng)求行从祝。請(qǐng)求行中襟己,動(dòng)詞可選的有GET、 POST牍陌、 PUT PATCH 擎浴、DELETE、 HEAD 毒涧、OPTIONS 等贮预。路徑如果你沒(méi)有寫,默認(rèn)路徑為 /契讲。協(xié)議/版本仿吞,比如HTTP/1.1。
第二部分捡偏,請(qǐng)求頭部唤冈,由一系列key:value值組成。如上所示的Context-Type:text/html银伟,表示內(nèi)容為text文件或者HTML文件你虹。
第三部分,是一個(gè)回車(空行)彤避,將第二部分和第四部分分割傅物。
第四部分,就是要上傳的數(shù)據(jù)琉预。
3.HTTP響應(yīng)的格式
HTTP響應(yīng)也由四個(gè)部分組成董饰,分別是:狀態(tài)行、消息報(bào)頭圆米、空行和響應(yīng)正文卒暂。
第一部風(fēng) 協(xié)議/版本號(hào) 狀態(tài)碼 狀態(tài)解釋
第二部分 Key1: value1
第二部分 Key2: value2
第二部分 Content-Length: 17931
第二部分 Content-Type: text/html
第三部分
第四部分 要下載的內(nèi)容
其中,第一部分為狀態(tài)娄帖,表示協(xié)議/版本號(hào)(如HTTP/1.1)介却,狀態(tài)碼及狀態(tài)信息構(gòu)成。
第二部分块茁,狀態(tài)消息齿坷,由一系列key:value值組成。如上所示的Context-Type:text/html数焊,表示內(nèi)容為text文件或者h(yuǎn)tml文件永淌。
第三部分,是一個(gè)回車(空行)佩耳,將第二部分和第四部分分割遂蛀。
第四部分,就是要下載的數(shù)據(jù)干厚。
4.HTTP狀態(tài)碼
-
1xx
信息李滴,服務(wù)器收到請(qǐng)求螃宙,需要請(qǐng)求者繼續(xù)執(zhí)行操作。 -
2xx
成功所坯,操作被成功接收并處理谆扎。 -
3xx
重定向,需要進(jìn)一步的操作以完成請(qǐng)求芹助。 -
4xx
客戶端錯(cuò)誤堂湖,請(qǐng)求包含語(yǔ)法錯(cuò)誤或無(wú)法完成請(qǐng)求。 -
5xx
服務(wù)器錯(cuò)誤状土,服務(wù)器在處理請(qǐng)求的過(guò)程中發(fā)生了錯(cuò)誤无蜂。
具體狀態(tài)碼含義可上網(wǎng)查詢。
5.用chrom查看請(qǐng)求和響應(yīng)
- 打開chrome蒙谓,
F12
進(jìn)入開發(fā)者工具斥季,如下圖1所示:
圖1 - 點(diǎn)擊
network
選項(xiàng),在搜索框輸入https://www.baidu.com累驮,并點(diǎn)擊name
下的第一行如下圖2所示:
- 點(diǎn)擊
header
下的Request Header
選項(xiàng)酣倾,并點(diǎn)擊View source
選項(xiàng)即可看到該請(qǐng)求內(nèi)容,如下圖3所示:
圖3
由圖3可知該請(qǐng)求只有第一慰照、第二、第三部分琉朽,沒(méi)有第四部分毒租。如果有請(qǐng)求的第四部分,那么在 FormData 或 Payload 里面可以看到箱叁。 - 點(diǎn)擊圖2
Response Header
選項(xiàng)墅垮,并點(diǎn)擊View Source
選項(xiàng),即可看到相應(yīng)內(nèi)容耕漱,如下圖4所示:
圖4
響應(yīng)內(nèi)容可通過(guò)點(diǎn)擊Response
選項(xiàng)查看算色,如下圖5所示:圖5
6.curl命令
-
curl www.baidu.com
該命令將網(wǎng)頁(yè)內(nèi)容顯示在命令行。如下圖所示: curl www.baidu.com >index.html
該命令執(zhí)行的結(jié)果是將該網(wǎng)頁(yè)下載下來(lái)并保存至index.html
文件里螟够。curl -o index.html www.baidu.com
該命令的作用和上一條命令一樣灾梦,也是將網(wǎng)頁(yè)下載并保存至index.html
文件里。-
curl -I www.baidu.com
該命令是將baidu.com的響應(yīng)頭部顯示在命令行中妓笙,如下圖所示:
如果將參數(shù)-I
變成-i
則顯示響應(yīng)頭部和整個(gè)頁(yè)面若河。 curl -L www.sina.com
,該命令執(zhí)行的結(jié)果是將網(wǎng)站自動(dòng)跳轉(zhuǎn)至www.sina.com.cn
,-L
參數(shù)的作用就是自動(dòng)跳轉(zhuǎn)寞宫。-
curl -v www.baidu.com
萧福,-v
參數(shù)可以顯示一次http通信的整個(gè)過(guò)程,包括端口連接和http request頭信息辈赋,如下圖所示:
curl -c cookies.txt http://www.baidu.com/
,該命令可以把訪問(wèn)網(wǎng)站的cookies保存在cookies.txt
文件中鲫忍。curl -b cookies.txt http://www.baidu.com/
,該命令則可以利用已有的cookie信息文件來(lái)訪問(wèn)網(wǎng)站膏燕。
更多命令用法請(qǐng)參考https://man.linuxde.net/curl 或curl.haxx.se/docs/manpage.html