大家一直都在說(shuō)接口自動(dòng)化唆缴,但對(duì)于接口測(cè)試的基礎(chǔ)HTTP協(xié)議,你了解多少呢黍翎?
HTTP協(xié)議采用了請(qǐng)求/響應(yīng)模型面徽。客戶(hù)端按照一定的規(guī)則請(qǐng)求,服務(wù)端響應(yīng)對(duì)應(yīng)的請(qǐng)求趟紊。HTTP協(xié)議的全名叫超文本傳輸協(xié)議氮双,為英文HyperText Transfer Protocol,的縮寫(xiě)霎匈,是互聯(lián)網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)協(xié)議戴差。
我作為APP測(cè)試人員,經(jīng)常用fiddler抓包铛嘱,比較好奇這些抓到的包暖释,每項(xiàng)是什么含義,具體代表什么墨吓,那么我們就從一個(gè)fiddler應(yīng)用每次打開(kāi)默認(rèn)的一個(gè)請(qǐng)求來(lái)學(xué)習(xí)下一個(gè)完整的HTTP請(qǐng)求包和響應(yīng)包:
一饭入、http請(qǐng)求包
請(qǐng)求行
第一行分別包含:請(qǐng)求方法、請(qǐng)求地址肛真、請(qǐng)求協(xié)議谐丢;我們來(lái)一一了解。
1蚓让、請(qǐng)求方法
“GET”是請(qǐng)求方法里面的一種乾忱。根據(jù)HTTP標(biāo)準(zhǔn),HTTP請(qǐng)求可以使用多種請(qǐng)求方法历极。
我們可以這樣認(rèn)為:一個(gè)URL地址窄瘟,它用于描述一個(gè)網(wǎng)絡(luò)上的資源,而HTTP中的GET趟卸,POST蹄葱,PUT,DELETE就對(duì)應(yīng)著對(duì)這個(gè)資源的查锄列,改图云,增,刪4個(gè)操作邻邮。
我其實(shí)測(cè)試過(guò)程中見(jiàn)得最多的就是GET和POST竣况,GET一般用于獲取/查詢(xún)資源信息,而POST一般用于更新資源信息筒严。
請(qǐng)求方法 ? ? ? ? ? ? ? ?備注
GET ? ?請(qǐng)求指定的頁(yè)面信息丹泉,請(qǐng)求不包含實(shí)體,并返回實(shí)體主體鸭蛙。
HEAD ? ?類(lèi)似于get請(qǐng)求摹恨,只不過(guò)返回的響應(yīng)中沒(méi)有具體的內(nèi)容,用于獲取報(bào)頭
POST ? ?向指定資源提交數(shù)據(jù)進(jìn)行處理請(qǐng)求(例如提交表單或者上傳文件)娶视,數(shù)據(jù)被包含在請(qǐng)求體中晒哄,POST請(qǐng)求可能會(huì)導(dǎo)致新的資源的建立和/或已有資源的修改。
PUT ? ?從客戶(hù)端向服務(wù)器傳送的數(shù)據(jù)取代指定的文檔的內(nèi)容
DELETE ? ?請(qǐng)求服務(wù)器刪除指定的頁(yè)面
CONNECT ? ?HTTP/1.1協(xié)議中預(yù)留給能夠?qū)⑦B接改為管道方式的代理服務(wù)器。
OPTIONS ? ?允許客戶(hù)端查看服務(wù)器的性能
TRACE ? ?回顯服務(wù)器收到的請(qǐng)求揩晴,主要用于測(cè)試或診斷
2勋陪、請(qǐng)求地址
“https://www.fiddler2.com/UpdateCheck.aspx?isBeta=False”贪磺,其實(shí)就是URL硫兰。
基本URL包含模式(或稱(chēng)協(xié)議)、服務(wù)器名稱(chēng)(或IP地址)寒锚、路徑和文件名劫映,如“協(xié)議://授權(quán)/路徑?查詢(xún)”。完整的刹前、帶有授權(quán)部分的普通統(tǒng)一資源標(biāo)志符語(yǔ)法看上去如下:協(xié)議://用戶(hù)名:密碼@子域名.域名.頂級(jí)域名:端口號(hào)/目錄/文件名.文件后綴?參數(shù)=值#標(biāo)志
1)模式/協(xié)議(scheme):它告訴瀏覽器如何處理將要打開(kāi)的文件泳赋。最常用的模式是超文本傳輸協(xié)議(Hypertext Transfer Protocol,縮寫(xiě)為HTTP)喇喉,這個(gè)協(xié)議可以用來(lái)訪問(wèn)網(wǎng)絡(luò)祖今。如“http://”表示超文本傳輸協(xié)議資源,“https://”表示用安全套接字層傳送的超文本傳輸協(xié)議拣技,“ftp://”表示文件傳輸協(xié)議……
2)文件所在的服務(wù)器的名稱(chēng)或IP地址千诬,后面是到達(dá)這個(gè)文件的路徑和文件本身的名稱(chēng)。服務(wù)器的名稱(chēng)或IP地址后面有時(shí)還跟一個(gè)冒號(hào)和一個(gè)端口號(hào)膏斤。它也可以包含接觸服務(wù)器必須的用戶(hù)名稱(chēng)和密碼徐绑。路徑部分包含等級(jí)結(jié)構(gòu)的路徑定義,一般來(lái)說(shuō)不同部分之間以斜線(/)分隔莫辨“燎眩“?”詢(xún)問(wèn)部分一般用來(lái)傳送對(duì)服務(wù)器上的數(shù)據(jù)庫(kù)進(jìn)行動(dòng)態(tài)詢(xún)問(wèn)時(shí)所需要的參數(shù)。
3沮榜、請(qǐng)求協(xié)議
“HTTP/1.1”盘榨,指的是請(qǐng)求協(xié)議。下面簡(jiǎn)單介紹三種版本的請(qǐng)求協(xié)議蟆融,目前無(wú)2.0版本较曼,正在開(kāi)發(fā)中。
HTTP/0.9?:只接受GET一種請(qǐng)求方法振愿,沒(méi)有在通信中指定版本號(hào)捷犹,且不支持請(qǐng)求頭。由于該版本不支持POST方法冕末,因此客戶(hù)端無(wú)法向服務(wù)器傳遞太多信息萍歉。
HTTP/1.0?:第一個(gè)在通信中指定的版本號(hào),至今被廣泛采用档桃,特別是在代理服務(wù)器中枪孩。支持上面說(shuō)到的,三種請(qǐng)求方法: GET, POST 和 HEAD方法
HTTP/1.1?:當(dāng)前版本號(hào),持久連接被默認(rèn)采用蔑舞,并能很好地配合代理服務(wù)器工作拒担。還支持以管道方式在同時(shí)發(fā)送多個(gè)請(qǐng)求,以便降低線路負(fù)載攻询,提高傳輸速度从撼。相對(duì)1.0版本,HTTP1.1新增了五種請(qǐng)求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法钧栖。
請(qǐng)求消息頭
第二行以后均表示消息頭低零,
User-Agent:中文名為用戶(hù)代理,簡(jiǎn)稱(chēng) UA拯杠,它是一個(gè)特殊字符串頭掏婶,使得服務(wù)器能夠識(shí)別客戶(hù)使用的操作系統(tǒng)及版本、CPU 類(lèi)型潭陪、瀏覽器及版本雄妥、瀏覽器渲染引擎、瀏覽器語(yǔ)言依溯、瀏覽器插件等老厌。一些網(wǎng)站常常通過(guò)判斷 UA 來(lái)給不同的操作系統(tǒng)、不同的瀏覽器發(fā)送不同的頁(yè)面誓沸,因此可能造成某些頁(yè)面無(wú)法在某個(gè)瀏覽器中正常顯示梅桩,但通過(guò)偽裝 UA 可以繞過(guò)檢測(cè)。
Pragma:是 HTTP/1.1 之前版本的歷史遺留字段拜隧∷薨伲“Pargma: no-cache”只能用在客戶(hù)端發(fā)送的請(qǐng)求中『樘恚客戶(hù)端會(huì)要求所有的中間服務(wù)器不返回緩存的資源垦页。 但要整體掌握全部中間服務(wù)器使用 HTTP 協(xié)議版本確實(shí)不現(xiàn)實(shí)的。因此干奢,發(fā)送的請(qǐng)求會(huì)同時(shí)含有?Cache-Control: no-cache和?Pragma: no-cache痊焊。
Host:訪問(wèn)的http服務(wù)器的域名/IP 地址和端口號(hào)。在http 1.1中不能缺失host字段,如果缺失, 服務(wù)器返回400 bad request忿峻,http1.1中不能缺失host字段薄啥,但host字段可以是空值;在http 1.0中可以缺失host字段逛尚。
Accept-Language: 表示瀏覽器or客戶(hù)端所支持的語(yǔ)言類(lèi)型垄惧;
Referer:Referer是header的一部分,當(dāng)瀏覽器向web服務(wù)器發(fā)送請(qǐng)求的時(shí)候绰寞,一般會(huì)帶上Referer到逊,告訴服務(wù)器我是從哪個(gè)頁(yè)面鏈接過(guò)來(lái)的铣口,服務(wù)器以此可以獲得一些信息用于處理。
Accept-Encoding: 瀏覽器支持的壓縮編碼觉壶。gzip脑题,GNU zip 的縮寫(xiě),它是一個(gè) GNU 自由軟件的文件壓縮程序铜靶,也經(jīng)常用來(lái)表示 gzip 這種文件格式叔遂。deflate是同時(shí)使用了 LZ77 算法與哈夫曼編碼(Huffman Coding)的一個(gè)無(wú)損數(shù)據(jù)壓縮算法。
Connection: 表示客戶(hù)端與服務(wù)連接類(lèi)型旷坦;?close表明當(dāng)前正在使用的tcp鏈接在請(qǐng)求處理完畢后會(huì)被斷掉掏熬。以后client再進(jìn)行新的請(qǐng)求時(shí)就必須創(chuàng)建新的tcp鏈接了
請(qǐng)求實(shí)體內(nèi)容
上圖中舉的例子佑稠,實(shí)體內(nèi)容為空行秒梅;原因是因?yàn)槔邮莋et請(qǐng)求,是沒(méi)有請(qǐng)求實(shí)體內(nèi)容的舌胶。如果是post請(qǐng)求捆蜀,實(shí)體內(nèi)容一般格式如下:
name1=value1&name2=value2&name3=value3
二、http響應(yīng)包
響應(yīng)狀態(tài)行
包含協(xié)議版本幔嫂、狀態(tài)碼辆它、原因短語(yǔ),因?yàn)榍懊嬉呀?jīng)介紹了協(xié)議版本履恩,在此不啰嗦锰茉,主要講下?tīng)顟B(tài)碼和原因短語(yǔ):
用以表示網(wǎng)頁(yè)服務(wù)器HTTP響應(yīng)狀態(tài)的3位數(shù)字代碼,主要分為5類(lèi):
消息1xx(100~199切心,目前已經(jīng)定義的有100~102):這一類(lèi)型的狀態(tài)碼飒筑,代表請(qǐng)求已被接受,需要繼續(xù)處理绽昏。這類(lèi)響應(yīng)是臨時(shí)響應(yīng)协屡,只包含狀態(tài)行和某些可選的響應(yīng)頭信息,并以空行結(jié)束全谤。
成功2xx(200~299肤晓,目前已經(jīng)定義的有200~207):代表請(qǐng)求已成功被服務(wù)器接收、理解认然、并接受补憾。最常見(jiàn)的如:200 OK 請(qǐng)求已成功,請(qǐng)求所希望的響應(yīng)頭或數(shù)據(jù)體將隨此響應(yīng)返回卷员。
重定向3xx(300~399盈匾,目前已經(jīng)定義的有300~307):這類(lèi)狀態(tài)碼代表需要客戶(hù)端采取進(jìn)一步的操作才能完成請(qǐng)求。通常子刮,這些狀態(tài)碼用來(lái)重定向威酒,后續(xù)的請(qǐng)求地址(重定向目標(biāo))在本次響應(yīng)的 Location 域中指明窑睁。
請(qǐng)求錯(cuò)誤4xx(400~499,目前已經(jīng)定義的有400~449):代表了客戶(hù)端看起來(lái)可能發(fā)生了錯(cuò)誤葵孤,妨礙了服務(wù)器的處理担钮。除非響應(yīng)的是一個(gè) HEAD 請(qǐng)求,否則服務(wù)器就應(yīng)該返回一個(gè)解釋當(dāng)前錯(cuò)誤狀況的實(shí)體尤仍,以及這是臨時(shí)的還是永久性的狀況箫津。這些狀態(tài)碼適用于任何請(qǐng)求方法。瀏覽器應(yīng)當(dāng)向用戶(hù)顯示任何包含在此類(lèi)錯(cuò)誤響應(yīng)中的實(shí)體內(nèi)容宰啦。最常見(jiàn)的如:404 Not Found 請(qǐng)求失敗苏遥,請(qǐng)求所希望得到的資源未被在服務(wù)器上發(fā)現(xiàn)。
服務(wù)器錯(cuò)誤5xx赡模、6xx:服務(wù)器在處理請(qǐng)求的過(guò)程中有錯(cuò)誤或者異常狀態(tài)發(fā)生田炭,也有可能是服務(wù)器意識(shí)到以當(dāng)前的軟硬件資源無(wú)法完成對(duì)請(qǐng)求的處理。最常見(jiàn)的如:500 Internal Server Error 服務(wù)器遇到了一個(gè)未曾預(yù)料的狀況漓柑,導(dǎo)致了它無(wú)法完成對(duì)請(qǐng)求的處理教硫,一般來(lái)說(shuō),這個(gè)問(wèn)題都會(huì)在服務(wù)器端的源代碼出現(xiàn)錯(cuò)誤時(shí)出現(xiàn)辆布。
響應(yīng)消息頭
Cache-Control:指定請(qǐng)求和響應(yīng)遵循的緩存機(jī)制瞬矩。
Content-Type:定義網(wǎng)絡(luò)文件的類(lèi)型和網(wǎng)頁(yè)的編碼,決定瀏覽器將以什么形式、什么編碼讀取這個(gè)文件
Vary:Vary頭域值指定了一些請(qǐng)求頭域锋玲,這些請(qǐng)求頭域用來(lái)決定當(dāng)緩存中存在一個(gè)響應(yīng)景用,并且該緩存沒(méi)有過(guò)期失效,是否被允許去利用此響應(yīng)去回復(fù)后續(xù)請(qǐng)求而不需要重驗(yàn)證(revalidation)
Server: 這個(gè)消息頭提供所使用的Web服務(wù)器軟件的相關(guān)信息惭蹂。
其他幾個(gè)字面意思能看懂伞插,就不介紹了。
響應(yīng)實(shí)體內(nèi)容
大部分測(cè)試的平臺(tái)剿干,響應(yīng)實(shí)體會(huì)以json格式返回蜂怎,給前端處理。
未經(jīng)授權(quán)置尔,請(qǐng)勿轉(zhuǎn)載杠步,謝謝!