http和https屬于計(jì)算機(jī)網(wǎng)絡(luò)的范疇哩罪,但是作為測試人員狞甚,我們也每天和這些請求打交道锁摔,所以掌握它們也是個必備的技能。
將會從以下幾個方面進(jìn)行闡述:
1哼审、網(wǎng)絡(luò)層結(jié)構(gòu)
2谐腰、Http協(xié)議
3、Https協(xié)議/SSL協(xié)議
4涩盾、Tcp三次握手
5十气、http和https對比
1、網(wǎng)絡(luò)層結(jié)構(gòu)
網(wǎng)絡(luò)結(jié)構(gòu)有兩種主流的分層方式:OSI七層模型和TCP/IP四層模型春霍。
OSI是指Open System Interconnect砸西,意為開放式系統(tǒng)互聯(lián)。
TCP/IP是指傳輸控制協(xié)議/網(wǎng)間協(xié)議,是目前世界上應(yīng)用最廣的協(xié)議芹枷。
OSI層對應(yīng)TCP/IP層OSI各層功能網(wǎng)絡(luò)協(xié)議設(shè)備
應(yīng)用層應(yīng)用層應(yīng)用程序(電子郵件衅疙,文件服務(wù))用戶接口HTTP,FTP,
TFTP,NFS
網(wǎng)關(guān)
表示層應(yīng)用層數(shù)據(jù)的表示,壓縮和加密(數(shù)據(jù)格式化鸳慈,代碼轉(zhuǎn)化饱溢,數(shù)據(jù)加密)TELNET,SNMP網(wǎng)關(guān)
會話層應(yīng)用層建立、管理和終止會話SMTP走芋,DNS網(wǎng)關(guān)
傳輸層傳輸層提供端到端可靠報文和錯誤回復(fù)TCP,UDP網(wǎng)關(guān)
網(wǎng)絡(luò)層網(wǎng)際互聯(lián)層提供數(shù)據(jù)包從源到宿的傳遞和網(wǎng)際交互IP,ICMP,ARP,RARP,UUCP路由器
鏈路層網(wǎng)絡(luò)接口層將比特組裝成幀和點(diǎn)到點(diǎn)傳遞FDDI,SLIP,
PPP,PDN
交換機(jī)
物理層網(wǎng)絡(luò)接口層傳輸比特流绩郎,以二進(jìn)制數(shù)據(jù)形式在物理媒體上傳輸數(shù)據(jù)ISO2110,
IEEE802,
IEEE802.2
集線器,
中繼器’
兩種模型的區(qū)別:
1.OSI采用七層模型翁逞,TCP/IP協(xié)議的是四層模型
2.TCP/IP網(wǎng)絡(luò)接口層沒有真正的定義肋杖,知識概念性的描述。OSI把他分為2層熄攘,每一層功能詳盡兽愤、
3.在協(xié)議開發(fā)之前彼念,就有了OSI模型挪圾,所以O(shè)IS模型具有共通性,而TCP/IP是基于協(xié)議建立的模型逐沙,不適用于非TCP/IP的網(wǎng)絡(luò)哲思。
4.實(shí)際意義中,OIS模型是理論上的模型吩案,沒有成熟的產(chǎn)品棚赔,而TCP/IP已經(jīng)成為國際標(biāo)準(zhǔn)。
2徘郭、HTTP協(xié)議
http協(xié)議是基于TCP/IP協(xié)議的應(yīng)用程序協(xié)議靠益,不包括數(shù)據(jù)包的傳輸,主要規(guī)定了客戶端和服務(wù)器的通信格式残揉,默認(rèn)使用80端口胧后。
http協(xié)議的發(fā)展史
1. 1991年發(fā)布http/0.9版本,只有g(shù)et命令抱环,而且服務(wù)器只返回HTML格式字符串壳快,服務(wù)器響應(yīng)完畢就關(guān)閉tcp連接。?
2. 1996年發(fā)布Http/1.0版本镇草,
優(yōu)點(diǎn):可以發(fā)送任何格式內(nèi)容眶痰,包括文字、圖像梯啤、視頻竖伯、二進(jìn)制。也豐富了命令Get,Post七婴,Head宏胯。請求和響應(yīng)的格式加入頭信息。
缺點(diǎn):每個TCP連接只能發(fā)送一個請求本姥,而新建TCP連接的成本很高肩袍,導(dǎo)致Http/1.0新能很差。
3. 1997發(fā)布Http/1.1版本婚惫,完善了Http協(xié)議氛赐,直至20年后的今天仍是最流行的版本。
優(yōu)點(diǎn):
a. 引入持久連接先舷,TCP默認(rèn)不關(guān)閉艰管,可被多個請求復(fù)用,對于一個域名蒋川,多數(shù)瀏覽器允許同時建立6個持久連接牲芋。
b. 引入管道機(jī)制,即在同一個TCP連接中捺球,可以同時發(fā)送多個請求缸浦,不過服務(wù)器還是按順序響應(yīng)。
c. 在頭部加入Content-Length字段氮兵,一個TCP可以同時傳送多個響應(yīng)裂逐,所以就需要該字段來區(qū)分哪些內(nèi)容屬于哪個響應(yīng)。
d. 分塊傳輸編碼泣栈,對于耗時的動態(tài)操作卜高,用流模式取代緩存模式,即產(chǎn)生一塊數(shù)據(jù)南片,就發(fā)送一塊數(shù)據(jù)掺涛。
e. 增加了許多命令,頭信息增加Host來指定服務(wù)器域名疼进,可以訪問一臺服務(wù)器上的不同網(wǎng)站薪缆。
缺點(diǎn):TCP連接中的響應(yīng)有順序,服務(wù)器處理完一個回應(yīng)才能處理下一個回應(yīng)颠悬,如果某個回應(yīng)特別慢矮燎,后面的請求就會排隊(duì)等著(對頭堵塞)。
4. 2015年發(fā)布Http/2版本赔癌,它有幾個特性:二進(jìn)制協(xié)議诞外、多工、數(shù)據(jù)流灾票、頭信息壓縮峡谊、服務(wù)器推送。
Http請求和響應(yīng)格式
Request格式:
Response格式:
下面解釋下請求頭和響應(yīng)頭的部分字段:
Host:?指定服務(wù)器域名,可用來區(qū)分訪問一個服務(wù)器上的不同服務(wù)
Connection:?keep-alive表示要求服務(wù)器不要關(guān)閉TCP連接既们,close表示明確要求關(guān)閉連接濒析,默認(rèn)值是keep-alive
Accept-Encoding:?說明自己可以接收的壓縮方式
USer-Agent:?用戶代理,是服務(wù)器能是被客戶端的操作系統(tǒng)(Android啥纸、iOS号杏、web)及相關(guān)的信息。作用是幫助服務(wù)器區(qū)分
??????客戶端斯棒,并且針對不同客戶端讓用戶看到不同數(shù)據(jù)盾致,做不同的操作
Content-Type:服務(wù)器告訴客戶端數(shù)據(jù)的格式,常見的值有text/plain荣暮,image/jpeg庭惜,image/png,video/mp4穗酥,application/json护赊,application/zip。這些數(shù)據(jù)類型總稱為MIME TYPE砾跃。
Content-Encoding:服務(wù)器數(shù)據(jù)壓縮方式
Transfer-Encoding:chunked表示采用分塊傳輸編碼骏啰,有該字段則無需使用Content-Length字段。
Content-Length:聲明數(shù)據(jù)的長度蜓席,請求和回應(yīng)頭部都可以使用該字段器一。
3课锌、Https協(xié)議/SSL協(xié)議
Https協(xié)議是以安全為目標(biāo)的Http通道厨内,簡單來說就是Http的安全版。主要是在Http下加入SSL層(現(xiàn)在主流的是SLL/TLS)渺贤,SSL是Https協(xié)議的安全基礎(chǔ)雏胃。Https默認(rèn)端口號為443。
竊聽風(fēng)險:Http采用明文傳輸數(shù)據(jù)志鞍,第三方可以獲知通信內(nèi)容
篡改風(fēng)險:第三方可以修改通信內(nèi)容
冒充風(fēng)險:第三方可以冒充他人身份進(jìn)行通信
SSL/TLS協(xié)議就是為了解決這些風(fēng)險而設(shè)計(jì)瞭亮,希望達(dá)到:
所有信息加密傳輸,三方竊聽通信內(nèi)容
具有校驗(yàn)機(jī)制固棚,內(nèi)容一旦被篡改统翩,通信雙發(fā)立刻會發(fā)現(xiàn)
配備身份證書,防止身份被冒充
4此洲、Tcp三次握手
Http和Https協(xié)議請求都會通過Tcp三次握手建立Tcp連接厂汗。當(dāng)時記得面試的時候自己看了好多次TCP相關(guān)的知識,因?yàn)槊嬖嚭芸赡軙柕竭@個問題呜师。下面介紹具體的三次握手:
那么為什么一定要握手三次娶桦,一次兩次難道不行么?重新回顧這個問題,認(rèn)真的分析下為什么必須是三次握手衷畦。
第一次握手栗涂,A向B發(fā)送信息后,B收到信息祈争。B可確認(rèn)A的發(fā)信息能力和B的收信息能力
第二次握手斤程,B向A發(fā)送消息,A收到消息菩混。A可確認(rèn)A的發(fā)信息能力和收信息能力暖释,A也可以確認(rèn)B的收信息能能力和B的發(fā)信息能力
第三次握手,A向B發(fā)送消息墨吓,B收到消息球匕。B可確認(rèn)A的收信息能力和B的發(fā)信息能力
通過三次握手,A和B都能確認(rèn)自己和對方的收發(fā)信息能力帖烘,相當(dāng)于建立了互相的信任亮曹,就可以開始通信了。
下面看一下三次握手具體發(fā)送的內(nèi)容秘症,用一張圖描述如下:
首先照卦,介紹一下幾個概念:
ACK:響應(yīng)標(biāo)識,1表示響應(yīng)乡摹,連接建立成功之后役耕,所有報文段ACK的值都為1
SYN:連接標(biāo)識,1表示建立連接聪廉,連接請求和連接接受報文段SYN=1瞬痘,其他情況都是0
FIN:關(guān)閉連接標(biāo)識,1標(biāo)識關(guān)閉連接板熊,關(guān)閉請求和關(guān)閉接受報文段FIN=1框全,其他情況都是0,跟SYN類似
seq number:序號干签,一個隨機(jī)數(shù)X津辩,請求報文段中會有該字段,響應(yīng)報文段沒有
ack number:應(yīng)答號容劳,值為請求seq+1喘沿,即X+1,除了連接請求和連接接受響應(yīng)報文段沒有該字段竭贩,其他的報文段都有該字段
知道了上面幾個概念后蚜印,看一下三次握手的具體流程:
第一次握手:建立連接請求∪⑹樱客戶端發(fā)送連接請求報文段晒哄,將SYN置為1睁宰,seq為隨機(jī)數(shù)x。然后寝凌,客戶端進(jìn)入SYN_SEND狀態(tài)柒傻,等待服務(wù)器確認(rèn)。
第二次握手:確認(rèn)連接請求较木。服務(wù)器收到客戶端的SYN報文段红符,需要對該請求進(jìn)行確認(rèn),設(shè)置ack=x+1(即客戶端seq+1)伐债。同時自己也要發(fā)送SYN請求信息预侯,即SYN置為1,seq=y峰锁。服務(wù)器將SYN和ACK信息放在一個報文段中萎馅,一并發(fā)送給客戶端,服務(wù)器進(jìn)入SYN_RECV狀態(tài)虹蒋。
第三次握手:客戶端收到SYN+ACK報文段糜芳,將ack設(shè)置為y+1,向服務(wù)器發(fā)送ACK報文段魄衅,這個報文段發(fā)送完畢峭竣,客戶端和服務(wù)券進(jìn)入ESTABLISHED狀態(tài),完成Tcp三次握手晃虫。
從圖中可以看出皆撩,建立連接經(jīng)歷了三次握手,當(dāng)數(shù)據(jù)傳輸完畢哲银,需要斷開連接扛吞,而斷開連接經(jīng)歷了四次揮手:
第一次揮手:主機(jī)1(可以是客戶端或服務(wù)器),設(shè)置seq和ack向主機(jī)2發(fā)送一個FIN報文段盘榨,此時主機(jī)1進(jìn)入FIN_WAIT_1狀態(tài)喻粹,表示沒有數(shù)據(jù)要發(fā)送給主機(jī)2了
第二次揮手:主機(jī)2收到主機(jī)1的FIN報文段,向主機(jī)1回應(yīng)一個ACK報文段草巡,表示同意關(guān)閉請求,主機(jī)1進(jìn)入FIN_WAIT_2狀態(tài)型酥。
第三次揮手:主機(jī)2向主機(jī)1發(fā)送FIN報文段山憨,請求關(guān)閉連接,主機(jī)2進(jìn)入LAST_ACK狀態(tài)弥喉。
第四次揮手:主機(jī)1收到主機(jī)2的FIN報文段郁竟,想主機(jī)2回應(yīng)ACK報文段,然后主機(jī)1進(jìn)入TIME_WAIT狀態(tài)由境;主機(jī)2收到主機(jī)1的ACK報文段后棚亩,關(guān)閉連接蓖议。此時主機(jī)1等待主機(jī)2一段時間后,沒有收到回復(fù)讥蟆,證明主機(jī)2已經(jīng)正常關(guān)閉勒虾,主機(jī)1頁關(guān)閉連接。
下面是Tcp報文段首部格式圖瘸彤,對于理解Tcp協(xié)議很重要:
5修然、Http協(xié)議和Https協(xié)議的對比
Http和Https的區(qū)別如下:
https協(xié)議需要到CA申請證書,大多數(shù)情況下需要一定費(fèi)用
Http是超文本傳輸協(xié)議质况,信息采用明文傳輸愕宋,Https則是具有安全性SSL加密傳輸協(xié)議
Http和Https端口號不一樣,Http是80端口结榄,Https是443端口
Http連接是無狀態(tài)的中贝,而Https采用Http+SSL構(gòu)建可進(jìn)行加密傳輸、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議臼朗,更安全雄妥。
Http協(xié)議建立連接的過程比Https協(xié)議快。因?yàn)镠ttps除了Tcp三次握手依溯,還要經(jīng)過SSL握手老厌。連接建立之后數(shù)據(jù)傳輸速度,二者無明顯區(qū)別黎炉。