前言
關(guān)于HTTP這個(gè)主題,可能大家馬上就會(huì)想到HTTP協(xié)議,確實(shí)今天要講的也就是HTTP協(xié)議,因?yàn)槲覀兠鎸?duì)的接口測試渤弛,大部分其實(shí)是基于HTTP協(xié)議的Web接口,所以今天就想將HTTP協(xié)議相關(guān)知識(shí)來梳理一下甚带。
HTTP概念理解
1她肯、什么是HTTP?
HTTP是Hyper Text Transfer Protocol(超文本傳輸協(xié)議)的縮寫鹰贵。它的發(fā)展是萬維網(wǎng)協(xié)會(huì)(World Wide Web Consortium)和Internet工作小組IETF(Internet Engineering Task Force)合作的結(jié)果晴氨,(他們)最終發(fā)布了一系列的RFC,RFC 1945定義了HTTP/1.0版本碉输。其中最著名的就是RFC 2616籽前。RFC 2616定義了今天普遍使用的一個(gè)版本——HTTP 1.1。
HTTP協(xié)議(HyperText Transfer Protocol,超文本傳輸協(xié)議)是用于從WWW服務(wù)器傳輸超文本到本地瀏覽器的傳送協(xié)議枝哄。它可以使瀏覽器更加高效肄梨,使網(wǎng)絡(luò)傳輸減少。它不僅保證計(jì)算機(jī)正確快速地傳輸超文本文檔挠锥,還確定傳輸文檔中的哪一部分众羡,以及哪部分內(nèi)容首先顯示(如文本先于圖形)等。
HTTP是一個(gè)應(yīng)用層協(xié)議蓖租,由請(qǐng)求和響應(yīng)構(gòu)成粱侣,是一個(gè)標(biāo)準(zhǔn)的客戶端服務(wù)器模型。HTTP是一個(gè)無狀態(tài)的協(xié)議蓖宦。
2齐婴、在TCP/IP協(xié)議棧中的位置
HTTP協(xié)議通常承載于TCP協(xié)議之上,有時(shí)也承載于TLS或SSL協(xié)議層之上稠茂,這個(gè)時(shí)候尔店,就成了我們常說的HTTPS。如下圖所示:
默認(rèn)HTTP的端口號(hào)為80主慰,HTTPS的端口號(hào)為443。(劃重點(diǎn)鲫售,這個(gè)很重要得記住)
工作流程
在說工作流程之前共螺,我們得先了解HTTP協(xié)議的是如何在瀏覽器和Web服務(wù)器之前交互的。
1情竹、HTTP的請(qǐng)求響應(yīng)模型
HTTP協(xié)議永遠(yuǎn)都是客戶端發(fā)起請(qǐng)求藐不,服務(wù)器返回響應(yīng)結(jié)果的,看圖更好理解秦效,見下圖:
這樣模型就限制了使用HTTP協(xié)議雏蛮,無法實(shí)現(xiàn)在客戶端沒有發(fā)起請(qǐng)求的時(shí)候,服務(wù)器將消息推送給客戶端(這里暫時(shí)只考慮短連接阱州,鑒于篇幅關(guān)系不擴(kuò)展長連接了挑秉,有興趣的童鞋可以自己搜索了解HTTP長連接相關(guān)知識(shí))。另外苔货,HTTP協(xié)議是一個(gè)無狀態(tài)的協(xié)議犀概,同一個(gè)客戶端的這次請(qǐng)求和上次請(qǐng)求是沒有對(duì)應(yīng)關(guān)系的。
2夜惭、工作過程
一次HTTP操作稱為一個(gè)事務(wù)姻灶,其工作過程可分為下面幾步:
(1)客戶端連接到Web服務(wù)器
一個(gè)HTTP客戶端,通常是瀏覽器诈茧,與Web服務(wù)器的HTTP端口(默認(rèn)為80)建立一個(gè)TCP套接字連接产喉。
(2)發(fā)送HTTP請(qǐng)求
通過TCP套接字,客戶端向Web服務(wù)器發(fā)送一個(gè)文本的請(qǐng)求報(bào)文,一個(gè)請(qǐng)求報(bào)文由請(qǐng)求行曾沈、請(qǐng)求頭部这嚣、空行和請(qǐng)求數(shù)據(jù)4部分組成。
(3)服務(wù)器接受請(qǐng)求并返回HTTP響應(yīng)
Web服務(wù)器解析請(qǐng)求晦譬,定位請(qǐng)求資源疤苹。服務(wù)器將資源復(fù)本寫到TCP套接字,由客戶端讀取敛腌。一個(gè)響應(yīng)由狀態(tài)行卧土、響應(yīng)頭部、空行和響應(yīng)數(shù)據(jù)4部分組成像樊。
(4)釋放連接TCP連接
Web服務(wù)器主動(dòng)關(guān)閉TCP套接字尤莺,釋放TCP連接;客戶端被動(dòng)關(guān)閉TCP套接字生棍,釋放TCP連接颤霎。
(5)客戶端瀏覽器解析HTML內(nèi)容
客戶端瀏覽器首先解析狀態(tài)行,查看表明請(qǐng)求是否成功的狀態(tài)代碼涂滴。然后解析每一個(gè)響應(yīng)頭友酱,響應(yīng)頭告知以下為若干字節(jié)的HTML文檔和文檔的字符集∪嶙荩客戶端瀏覽器讀取響應(yīng)數(shù)據(jù)HTML缔杉,根據(jù)HTML的語法對(duì)其進(jìn)行格式化,并在瀏覽器窗口中顯示搁料。
例如新啼,下圖就是在瀏覽器地址欄輸入google搜索的地址后按下回車的過程:
HTTP狀態(tài)碼
請(qǐng)求成功后眉睹,不管結(jié)果如何瀏覽器都會(huì)收到一個(gè)返回的HTTP狀態(tài)碼匣掸,我們可以根據(jù)這個(gè)狀態(tài)碼來判斷本次請(qǐng)求成功與否播聪,下面是常見的HTTP狀態(tài)碼:
200- 請(qǐng)求成功
301- 資源(網(wǎng)頁等)被永久轉(zhuǎn)移到其它URL
404- 請(qǐng)求的資源(網(wǎng)頁等)不存在
500- 內(nèi)部服務(wù)器錯(cuò)誤
HTTP狀態(tài)碼分類:
HTTP狀態(tài)碼由三個(gè)十進(jìn)制數(shù)字組成,第一個(gè)十進(jìn)制數(shù)字定義了狀態(tài)碼的類型昭伸,后兩個(gè)數(shù)字沒有分類的作用梧乘,HTTP狀態(tài)碼共分為5種類型(劃重點(diǎn),這個(gè)也很重要得知道):
注:鑒于篇幅關(guān)系勋乾,全部的狀態(tài)碼列表就不貼了宋下,百度搜一下就出來了。給個(gè)鏈接參考:http://tool.oschina.net/commons?type=5
作者:測試開發(fā)棧
鏈接:http://www.reibang.com/p/d2b649078bc9
來源:簡書
著作權(quán)歸作者所有辑莫。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)学歧,非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。