HTTP即HyperText Transfer Protocol(超文本傳輸協(xié)議),HTTP基于TCP/IP協(xié)議傳輸數(shù)據(jù)。
Chrome抓包
注:Chrome瀏覽器或Chrome內(nèi)核瀏覽器可用(如Edge, Firefox)
- 在目標(biāo)網(wǎng)頁(yè)打開開發(fā)者工具:
- 點(diǎn)擊網(wǎng)絡(luò)(Network):
此時(shí)就可以看到目標(biāo)網(wǎng)頁(yè)的所有請(qǐng)求。 - 查看請(qǐng)求和響應(yīng):
Fiddler代理抓包
瀏覽器自帶抓包工具功能有限,實(shí)際開發(fā)過(guò)程中往往會(huì)選擇一些代理工具進(jìn)行抓包。
常見的抓包工具主要有:Charles、Wireshark、Tcpdump、Fiddler等。對(duì)于初學(xué)者來(lái)說(shuō),使用簡(jiǎn)單且免費(fèi)的Fiddler(Fiddler只適用于Windows系統(tǒng))即可。
接下來(lái)Fiddler就可以進(jìn)行抓包了。
例如抓取嗶哩嗶哩的HTML頁(yè)面請(qǐng)求:
首先打開bilibili網(wǎng)站,要抓的包就是:
這么多包如何確定我們要找的是哪一個(gè)?
- 首先看URL,也就是目標(biāo)域名。
- 不同類型的包顏色不同,這里抓的是HTML頁(yè)面的包,因此找藍(lán)色的。
- 看body大小,請(qǐng)求的HTML頁(yè)面,body大小一般很大。
找到目標(biāo)后雙擊即可看到詳情:
HTTP協(xié)議格式
HTTP是一種請(qǐng)求——響應(yīng)式協(xié)議,由客戶端(即瀏覽器)發(fā)起請(qǐng)求,服務(wù)器返回響應(yīng)??梢酝ㄟ^(guò)抓包來(lái)分析HTTP協(xié)議的請(qǐng)求和響應(yīng)細(xì)節(jié)以及特點(diǎn)。
抓包工具可以使用Chrome開發(fā)者工具或者Fiddler。
HTTP請(qǐng)求
對(duì)于Get請(qǐng)求,一般沒有body,但是Post請(qǐng)求一般有body,在空行后的部分都是body內(nèi)容。
例如一個(gè)Post請(qǐng)求:
Get請(qǐng)求中雖然可以放body,但一般不建議,某些服務(wù)器或代理會(huì)忽略或刪除get方法中的body,某些客戶端不支持get請(qǐng)求添加body等。因此要攜帶body最好是使用post請(qǐng)求。
首行
首行包括方法、URL以及版本號(hào)。
URL
URL(Uniform Resource Locator),即統(tǒng)一資源定位符,俗稱“網(wǎng)址”?;ヂ?lián)網(wǎng)上的每一個(gè)文件都有唯一的一個(gè)URL。
一個(gè)URL通常包含:協(xié)議、主機(jī)、端口、路徑、查詢參數(shù)、錨點(diǎn)。
方法
HTTP協(xié)議常用方法有:
Get方法
GET 是最常用的 HTTP 方法,用來(lái)獲取服務(wù)器的某個(gè)資源。抓取的包大多數(shù)都是Get請(qǐng)求。
以百度首頁(yè)為例:
特點(diǎn):
- URL中的查詢參數(shù)可以為空,也可以不為空
- Header中的若干屬性以鍵值對(duì)的形式存在
- Get請(qǐng)求中的body一般為空
Post方法
特點(diǎn):
- URL中的查詢參數(shù)一般為空
- Header中的若干屬性以鍵值對(duì)的形式存在
- body 部分一般不為空
- body 內(nèi)的數(shù)據(jù)格式通過(guò) header 中的 Content-Type 指定
- body 的長(zhǎng)度由header 中的 Content-Length 指定
Get與Post的區(qū)別
get與post沒有本質(zhì)區(qū)別,get和post一般可以互換,但二者有些不同:
- get一般用于獲取,post一般用于提交
- get方法通過(guò)查詢參數(shù)獲取數(shù)據(jù),body一般為空
- post方法通過(guò)body提交數(shù)據(jù),查詢參數(shù)一般為空
- get一般是冪等的,post一般不是冪等的(每次相同請(qǐng)求返回同一個(gè)響應(yīng)就視為冪等)
- get可以緩存(因?yàn)閮绲刃裕?,post不可以緩存
請(qǐng)求報(bào)頭中的屬性
- Host:表示服務(wù)器主機(jī)的地址和端口
明明URL中已經(jīng)包含了服務(wù)器的地址和端口,為什么還要在設(shè)置一個(gè)Host呢?
其實(shí)一個(gè)服務(wù)器是可以托管多個(gè)網(wǎng)站的,這些網(wǎng)站共享同一個(gè)IP地址和端口號(hào),但是他們有不同的域名,這時(shí)Host的作用就體現(xiàn)出來(lái)了。Host屬性往往使用域名作為字段,這樣便于服務(wù)器識(shí)別。
例如網(wǎng)站A:www.A.com和網(wǎng)站B:www.B.com由同一個(gè)服務(wù)器托管,那么他們的URL中的ip地址和端口號(hào)就相同。無(wú)論是A網(wǎng)站還是B網(wǎng)站發(fā)起請(qǐng)求,通過(guò)DNS協(xié)議進(jìn)行域名解析后會(huì)得到同一個(gè)ip地址和端口號(hào),此時(shí)就需要Host屬性來(lái)識(shí)別是A網(wǎng)站的請(qǐng)求還是B網(wǎng)站的請(qǐng)求。
-
User-Agent:表示瀏覽器或操作系統(tǒng)的一些信息,包括類型、版本、語(yǔ)言等。
User-Agent的作用是讓服務(wù)器能夠識(shí)別客戶端的類型和能力,從而返回合適的響應(yīng)。
例如4399小游戲,需要Flash插件才能正常運(yùn)行,但是目前瀏覽器禁止自帶Flash功能,因此打開一個(gè)小游戲后會(huì)顯示:
同時(shí)User-Agent也用來(lái)表示客戶端是手機(jī)端還是網(wǎng)頁(yè)端,這也解釋了為什么同一個(gè)網(wǎng)站,用手機(jī)打開和用電腦打開時(shí),頁(yè)面布局什么的不盡相同。 -
Content-Length:表示body的數(shù)據(jù)長(zhǎng)度
-
Content-Type:表示body中的數(shù)據(jù)格式
Content-Type有多種類型,一般分為如下幾類:-
text/plain,表示純文本類型。它會(huì)把表單中的數(shù)據(jù)直接放到請(qǐng)求體中。這種格式適合于傳輸簡(jiǎn)單的文本數(shù)據(jù)。
-
以application開頭的,表示應(yīng)用類型。如:application/json表示JSON數(shù)據(jù)格式,application/x-www-form-urlencoded表示表單數(shù)據(jù)格式。
-
以mutipart開頭的,表示多部分類型。如:multipart/form-data表示表單數(shù)據(jù)格式。
application/x-www-form-urlencoded是默認(rèn)的表單數(shù)據(jù)格式,適用于大多數(shù)場(chǎng)景,但是不能上傳文件和二進(jìn)制數(shù)據(jù)。
multipart/form-data是一種多部分?jǐn)?shù)據(jù)格式,它把表單中的數(shù)據(jù)分為多個(gè)部分,每個(gè)部分用特定的符號(hào)分隔開,每個(gè)部分都可以有自己的Content-Type和編碼方式。可以上傳文件和二進(jìn)制數(shù)據(jù)。
multipart/form-data會(huì)占用更多的資源和帶寬,因此只有上傳文件或二進(jìn)制數(shù)據(jù)時(shí),才使用multipart/form-data,其他情況都使用application/x-www-form-urlencoded。
-
-
Referer:表示頁(yè)面是從哪一個(gè)頁(yè)面跳轉(zhuǎn)過(guò)來(lái)的。
例如從百度跳轉(zhuǎn)到B站,抓到的包就是:
這里的refer即表示了B站是從百度跳轉(zhuǎn)過(guò)來(lái)的。
當(dāng)我們?cè)谒阉饕嫔纤阉鲿r(shí),總會(huì)出現(xiàn)廣告,這些都是廣告商投遞的,廣告商通過(guò)搜索提高曝光度:
廣告商通過(guò)用戶點(diǎn)擊鏈接來(lái)確認(rèn)成交量。但是廣告商不會(huì)只在一個(gè)搜索引擎上投遞廣告,因此refer就可以幫助確定來(lái)源。
Cookie和Session
HTTP協(xié)議是無(wú)狀態(tài)協(xié)議。無(wú)狀態(tài)指的是HTTP服務(wù)器沒有記憶功能,每次客戶端向服務(wù)器發(fā)送請(qǐng)求,服務(wù)器都無(wú)法確定這個(gè)請(qǐng)求和之前的請(qǐng)求是否有關(guān),例如上某寶網(wǎng)購(gòu),雖然一開始登錄成功,當(dāng)我選定某個(gè)商品后,準(zhǔn)備進(jìn)行后續(xù)操作時(shí),服務(wù)器并不能確定這個(gè)請(qǐng)求是否關(guān)聯(lián)到之前的請(qǐng)求。之所以這樣設(shè)計(jì)是為了簡(jiǎn)化服務(wù)器的處理邏輯,節(jié)省網(wǎng)絡(luò)傳輸?shù)某杀?,但是這樣并不便于用戶操作,因此引入Cookie和Session來(lái)彌補(bǔ)這部分的缺陷。
-
Cookie
Cookie是一種在客戶端存儲(chǔ)用戶信息的機(jī)制,客戶端發(fā)送請(qǐng)求后,服務(wù)器除了返回響應(yīng)外,還會(huì)返回一個(gè)Cookie給客戶端,Cookie中存儲(chǔ)了當(dāng)前客戶端的狀態(tài)信息,例如登錄狀態(tài)等。當(dāng)客戶端下次發(fā)送請(qǐng)求時(shí),會(huì)一并把Cookie發(fā)過(guò)去,服務(wù)器就可以根據(jù)Cookie來(lái)確定客戶端的狀態(tài)。 -
Session
Cookie中往往會(huì)包含一些敏感信息,這些信息在傳輸過(guò)程中是透明的,并不安全,容易被盜用篡改。Session是一種更為安全的方法。
Session是一種在服務(wù)器存儲(chǔ)用戶信息的機(jī)制,客戶端發(fā)送請(qǐng)求后,服務(wù)器除了返回響應(yīng)外,同時(shí)會(huì)生成Cookie信息和一個(gè)Session ID,服務(wù)器把這個(gè)Session ID一并返回客戶端,后續(xù)客戶端發(fā)起請(qǐng)求時(shí),會(huì)一并把Session ID發(fā)過(guò)來(lái),服務(wù)器通過(guò)這個(gè)Session ID就可以找到對(duì)應(yīng)的Cookie信息,從而確定客戶端的狀態(tài)。
Cookie與Session的區(qū)別
- 存儲(chǔ)位置不同:Cookie存儲(chǔ)在客戶端,Session存儲(chǔ)在服務(wù)器。
- 安全性不同:Cookie不安全,Session相對(duì)安全。
- 性能不同:Cookie占用客戶端資源,影響瀏覽體驗(yàn);Session占用服務(wù)器資源,影響性能。
- 有效期不同:Cookie可以設(shè)置有效期,過(guò)期自動(dòng)刪除;Session沒有設(shè)置過(guò)期時(shí)間時(shí),瀏覽器關(guān)閉即刪除。
HTTP響應(yīng)
HTTP狀態(tài)碼
- 常見狀態(tài)碼有:
狀態(tài)碼 | 含義 |
---|---|
200 | OK(正常) |
404 | Not Found(沒有找到資源) |
403 | Forbidden(訪問(wèn)被拒絕) |
405 | Method Not Allowed(方法不支持) |
500 | Internal Server Error(服務(wù)器內(nèi)部錯(cuò)誤) |
502 | Bad Gateway(錯(cuò)誤網(wǎng)關(guān)) |
504 | Gateway Timeout(響應(yīng)超時(shí)) |
302 | Move temporarily(臨時(shí)重定向) |
301 | Moved Permanently(永久重定向) |
- 狀態(tài)碼小結(jié):
HTTP響應(yīng)報(bào)頭和正文
HTTP響應(yīng)報(bào)頭
響應(yīng)報(bào)頭的常見屬性有:
- text/html,這種格式把響應(yīng)數(shù)據(jù)轉(zhuǎn)化為HTML格式文檔,這種格式適用于返回網(wǎng)頁(yè)數(shù)據(jù),但是需要額外設(shè)置編碼格式。
例如:Content-Type=text/html; charset=utf8 - text/xml,把響應(yīng)數(shù)據(jù)轉(zhuǎn)換為xml格式文檔,這種格式適用于返回結(jié)構(gòu)化數(shù)據(jù),同樣需要設(shè)置編碼格式或者在xml文檔中聲明編碼格式。
- 以image開頭的,表示圖像類型,將響應(yīng)數(shù)據(jù)轉(zhuǎn)化為圖片顯示。
除此之外還有很多響應(yīng)屬性例如:text/css、text/javascript等。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-476020.html
HTTP響應(yīng)正文
響應(yīng)正文的具體格式取決于Content-Type屬性。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-476020.html
到了這里,關(guān)于HTTP協(xié)議基本格式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!