HTTP協(xié)議基礎(chǔ)

1.協(xié)議基礎(chǔ)

通訊協(xié)議規(guī)定了網(wǎng)絡(luò)設(shè)備進(jìn)行網(wǎng)絡(luò)通訊時(shí)必須遵守的一系列規(guī)則,以便使用同一規(guī)則進(jìn)行信息傳輸。

1.1 HTTP協(xié)議

HTTP (HyperText Transfer Protocol),超文本傳輸協(xié)議,當(dāng)前主流協(xié)議版本為HTTP/1.1,屬于TCP/IP的一個(gè)子集。HTTP協(xié)議是一種不保存狀態(tài)(無(wú)狀態(tài))的協(xié)議,協(xié)議自身不對(duì)請(qǐng)求和響應(yīng)之間的通信狀態(tài)進(jìn)行保存。也就是說(shuō)在HTTP這個(gè)級(jí)別,協(xié)議對(duì)于發(fā)送過(guò)的請(qǐng)求和響應(yīng)都不做持久化處理,因此引入了Cookie技術(shù)。

1.2 TCP/IP協(xié)議

TCP (Transmission Control Protocol),傳輸控制協(xié)議

TCP提供可靠的數(shù)據(jù)傳輸服務(wù)。為了方便傳輸,將大塊數(shù)據(jù)分割成以報(bào)文段為單位的數(shù)據(jù)包(字節(jié)流服務(wù),Byte Stream Service)進(jìn)行管理。為了保證可靠性傳輸,將數(shù)據(jù)準(zhǔn)確無(wú)誤地送達(dá)目標(biāo),TCP協(xié)議采用三次握手策略,通過(guò)SYN (synchronize) 和ACK (acknowledgement)作為標(biāo)記。首先發(fā)送一個(gè)帶SYN標(biāo)記的數(shù)據(jù)包給對(duì)方,對(duì)方收到后,回傳一個(gè)帶SYN/ACK標(biāo)記的數(shù)據(jù)包以示信息傳達(dá)確認(rèn),最后再回傳一個(gè)帶ACK標(biāo)記的數(shù)據(jù)包,代表握手結(jié)束。

IP (Internet Protocol),網(wǎng)際協(xié)議。
TCP/IP協(xié)議定義了電子設(shè)備如何連接互聯(lián)網(wǎng)以及數(shù)據(jù)如果在設(shè)備之間進(jìn)行傳輸?shù)臉?biāo)準(zhǔn)。
TCP/IP協(xié)議族按照層次劃分從上至下依次為,應(yīng)用層,傳輸層,網(wǎng)絡(luò)層,數(shù)據(jù)鏈路層。

1.3 DNS

DNS (Domain Name System,域名解析服務(wù)),位于應(yīng)用層,提供域名到IP地址之間的解析服務(wù)??赏ㄟ^(guò)域名查找IP地址,也可逆向反查域名。

1. 應(yīng)用層

應(yīng)用層決定了向用戶(hù)提供應(yīng)用服務(wù)時(shí)通信的活動(dòng)。TCP/IP協(xié)議族內(nèi)預(yù)存了各種通用的應(yīng)用服務(wù),如FTP (File Transfer Protocol),文件傳輸協(xié)議,DNS (Domain Name System),域名系統(tǒng)。HTTP協(xié)議也處于該層。

2. 傳輸層

傳輸層提供了網(wǎng)絡(luò)連接中的兩臺(tái)計(jì)算機(jī)之間的數(shù)據(jù)傳輸。有兩個(gè)性質(zhì)不同的協(xié)議,TCP (Transmission Control Protocol,傳輸控制協(xié)議),UDP (User Data Protocol,用戶(hù)數(shù)據(jù)報(bào)協(xié)議)。

3. 網(wǎng)絡(luò)層

網(wǎng)絡(luò)層用來(lái)處理在網(wǎng)絡(luò)上流動(dòng)的數(shù)據(jù)包,數(shù)據(jù)包是網(wǎng)絡(luò)傳輸?shù)淖钚?shù)據(jù)單位。該層規(guī)定了如何通過(guò)傳輸線路到達(dá)指定計(jì)算機(jī),并把數(shù)據(jù)包傳送給對(duì)方。IP協(xié)議位于該層。作用是把各種數(shù)據(jù)包傳送給對(duì)方,兩個(gè)重要條件是IP地址和MAC地址 (Media Access Control Address)。MAC地址是網(wǎng)卡的固定地址,IP地址使用ARP (Address Resolution Protocol,地址解析協(xié)議)憑借MAC地址進(jìn)行通信。

4. 數(shù)據(jù)鏈路層

用來(lái)處理連接網(wǎng)絡(luò)的硬件部分。

2.HTTP通信

2.1 HTTP報(bào)文

用于HTTP協(xié)議交互的信息被稱(chēng)為HTTP報(bào)文,分為請(qǐng)求報(bào)文(客戶(hù)端)和響應(yīng)報(bào)文(服務(wù)器)。報(bào)文本身是由多行(用CR+LF作換行符)數(shù)據(jù)構(gòu)成的字符串文本。

HTTP報(bào)文可分為報(bào)文首部和報(bào)文主體兩塊。兩者由最初出現(xiàn)的空行(CR+LF)來(lái)劃分,報(bào)文出體并不一定存在。

請(qǐng)求報(bào)文由請(qǐng)求方法、請(qǐng)求URI、協(xié)議版本、可選的請(qǐng)求首部字段和內(nèi)容實(shí)體構(gòu)成。


MessageMG1.jpeg

響應(yīng)報(bào)文由協(xié)議版本號(hào)、狀態(tài)碼、用以解釋狀態(tài)碼的原因的短語(yǔ)、可選的響應(yīng)首部字段和實(shí)體構(gòu)成。


ResponseMessage.jpeg

2.2 HTTP/1.1可使用的請(qǐng)求方法

HttpMethod.jpeg

PS:LINK和UNLINK已經(jīng)被HTTP/1.1廢棄

2.3 持久連接

HTTP初始版本中,每進(jìn)行一次HTTP通信就要斷開(kāi)一次TCP連接,增加了通信開(kāi)銷(xiāo)。為了解決TCP連接問(wèn)題,HTTP/1.1和一部分HTTP/1.0想出了持久連接 (HTTP Persistent Connections,也稱(chēng)為HTTP Keep-alive或HTTP connection reuse)的方法。持久連接的特點(diǎn)是只要任意一端沒(méi)有明確提出斷開(kāi)連接,則保持TCP連接狀態(tài)。

在HTTP/1.1中,所有的連接默認(rèn)都是持久連接,但在HTTP/1.0內(nèi)并未標(biāo)準(zhǔn)化。

2.4 狀態(tài)管理

HTTP是無(wú)狀態(tài)協(xié)議,不對(duì)之前發(fā)生過(guò)的請(qǐng)求和響應(yīng)狀態(tài)進(jìn)行管理,于是引入Cookie技術(shù)。Cookie會(huì)根據(jù)從服務(wù)器端發(fā)送的響應(yīng)報(bào)文內(nèi)一個(gè)叫Set-Cookie的首部字段信息,通知客戶(hù)端保存Cookie。當(dāng)下次客戶(hù)端再往該服務(wù)器發(fā)送請(qǐng)求時(shí),客戶(hù)端會(huì)自動(dòng)在請(qǐng)求報(bào)文中加入Cookie值后發(fā)送出去。

2.5 傳輸編碼

數(shù)據(jù)編碼可以提升傳輸速率,但會(huì)消耗計(jì)算機(jī)CPU等資源。

內(nèi)容編碼指明應(yīng)用在實(shí)體內(nèi)容上的編碼格式,并保持實(shí)體信息原樣壓縮。內(nèi)容編碼后的實(shí)體由客戶(hù)端接收并解碼。

常用編碼:

  • gzip (GNU zip)
  • compress (UNIX系統(tǒng)的標(biāo)準(zhǔn)壓縮)
  • deflate (zlib)
  • identity (不進(jìn)行編碼)

2.6 響應(yīng)狀態(tài)碼

StatusCode.jpeg
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容