HTTP協(xié)議,是構(gòu)建Web世界的基石技術(shù),HTTP協(xié)議應(yīng)是軟件開發(fā)者必備的知識(shí)儲(chǔ)備。本文是介紹HTTP協(xié)議的入門級(jí)文章。 通過在瀏覽器輸入網(wǎng)址這個(gè)簡(jiǎn)單的案例來介紹Http協(xié)議的交互流程。文本介紹交互流程包括兩個(gè)方面:
-
客戶端和服務(wù)端的交互
- HTTP半雙工通信
- HTTP無狀態(tài)特性
-
HTTP協(xié)議和其他協(xié)議之間的交互(DNS,TCP,IP等)
用戶在瀏覽器輸入網(wǎng)址到瀏覽器顯示網(wǎng)址內(nèi)容的這一過程中,介紹HTTP協(xié)議是如何配合其他協(xié)議完成整個(gè)通信流程。
一丶HTTP協(xié)議中客戶端和服務(wù)端之間的交互
繪制上圖的主要目的,是為了解釋HTTP協(xié)議交互中的兩個(gè)特點(diǎn):
-
基于請(qǐng)求-響應(yīng)形式的半雙工通信
半雙工通信是指,雙方均可以相互發(fā)送數(shù)據(jù),但是不能同時(shí)發(fā)送數(shù)據(jù)。HTTP協(xié)議的通信流程就是典型的半雙工通信。比如,當(dāng)我們?cè)跒g覽器中輸入某個(gè)域名后,將想目標(biāo)服務(wù)器發(fā)送請(qǐng)求報(bào)文。目標(biāo)服務(wù)器收到請(qǐng)求報(bào)文之后,將送回響應(yīng)報(bào)文。不存在瀏覽器和服務(wù)器同時(shí)發(fā)送數(shù)據(jù)的情況。
-
HTTP協(xié)議的無狀態(tài)特性
HTTP協(xié)議的無狀態(tài)性是HTTP協(xié)議簡(jiǎn)潔輕便的一種體現(xiàn)。HTTP協(xié)議的無狀態(tài)性體現(xiàn)在如下兩點(diǎn):
服務(wù)端同時(shí)接收到多個(gè)HTTP請(qǐng)求時(shí),其認(rèn)為每個(gè)HTTP請(qǐng)求都是相等的,其不能從HTTP請(qǐng)求中識(shí)別出不同的用戶。
同一個(gè)用戶對(duì)相同服務(wù)器發(fā)送的HTTP請(qǐng)求之間并不任何關(guān)系,更不具備任何記憶功能。此時(shí)發(fā)送的HTTP請(qǐng)求和前一時(shí)刻發(fā)送的HTTP請(qǐng)求是相互獨(dú)立的。
二丶HTTP協(xié)議與其他協(xié)議之間的交互
HTTP協(xié)議是TCP/IP協(xié)議棧的一部分,按照TCP/IP協(xié)議分層理念,其位于應(yīng)用層。一個(gè)完整的通信流程必然是由許多協(xié)議相互配合完成。本節(jié)將介紹HTTP協(xié)議是如何配合其他協(xié)議完瀏覽器發(fā)出請(qǐng)求到獲取響應(yīng)的通信過程
-
DNS域名解析過程
DNS是域名解析系統(tǒng),域名解析系統(tǒng)的只要目的就是完成域名地址到IP地址的轉(zhuǎn)換。此處引用一張圖來介紹DNS域名解析過程(圖片來源)。
image
結(jié)合上圖,以www.baidu.com這個(gè)域名為例。在瀏覽器中輸入該域名后,會(huì)經(jīng)過如下域名解析過程。- 從本機(jī)的host文件中檢查域名和IP地址的映射。host文件默認(rèn)保留了
localhost->127.0.0.1這個(gè)映射關(guān)系 - host文件中不存在解析關(guān)系時(shí),檢查瀏覽器是否存在解析緩存,若命中則使用解析緩存,否則將解析請(qǐng)求轉(zhuǎn)發(fā)給local DNS(local DNS是服務(wù)局部區(qū)域的域名解析服務(wù)器).
- local DNS先檢查自身是否存在該域名解析緩存,若命中返回解析結(jié)果。否則將解析請(qǐng)求轉(zhuǎn)發(fā)給ROOT DNS(根域名服務(wù)器)。
- 根域名服務(wù)器,檢查到請(qǐng)求解析的域名是www.baidu.com。那么返回解析頂級(jí)域名baidu.com的gTLD域名服務(wù)器地址。
- localDNS接收到根域名返回的gTLD域名服務(wù)器地址后,將解析請(qǐng)求再次轉(zhuǎn)發(fā)給該域名服務(wù)器
- gTLD域名服務(wù)器接收到www.baidu.com的域名請(qǐng)求后,返回二級(jí)域名www.baidu.com對(duì)應(yīng)的Name DNS服務(wù)器地址。
- local DNS收到來自gTLD的響應(yīng)后,再次將域名解析結(jié)果傳遞給Name DNS服務(wù)器。
- Name DNS服務(wù)器收到www.baidu.com的域名解析請(qǐng)求后,發(fā)現(xiàn)正屬于自身所管轄的解析范圍。所以查找域名和IP地址映射關(guān)系,將解析結(jié)果返local DNS。
- local DNS收到解析結(jié)構(gòu)后,緩存該解析結(jié)果。下次遇見相同的解析請(qǐng)求時(shí)。直接使用緩存結(jié)果即可。
- 從本機(jī)的host文件中檢查域名和IP地址的映射。host文件默認(rèn)保留了
-
協(xié)議封包/解包過程的過程
本文中將HTTP封包,TCP封包,IP封裝以及對(duì)應(yīng)的解包的過程統(tǒng)稱為協(xié)議封包和解包過程。其一般過程如下:
封包和解包的過程