[toc]
# HTTP簡(jiǎn)介
HTTP協(xié)議(HyperText Transfer Protocol,超文本傳輸協(xié)議)是因特網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)傳輸協(xié)議,它基于TCP/IP通信協(xié)議來(lái)傳遞數(shù)據(jù)(HTML 文件, 圖片文件, 查詢結(jié)果等)。
# HTTP 工作原理
HTTP協(xié)議工作于客戶端-服務(wù)端架構(gòu)上。
![](/upload/attach/202011/202011231723_M6DXK82G8KDWHAN.jpg)
## HTTP信息處理過(guò)程:
**此為典型案例:**
(1)客戶與服務(wù)器建立連接;
(2)客戶向服務(wù)器提出請(qǐng)求;
(3)服務(wù)器接受請(qǐng)求,并根據(jù)請(qǐng)求返回相應(yīng)的文件作為應(yīng)答;
(4)客戶與服務(wù)器關(guān)閉連接。
**宏觀工作方式:**
* 客戶端(UA)直接連接到Web服務(wù)器的通訊路徑如圖所示,客戶端與Web服務(wù)器之間的通訊不需要任何的中介服務(wù)器,這是最簡(jiǎn)單的情況。
![](/upload/attach/202011/202011241037_EXTQ9AVDXDZ5ZG6.jpg)
* 客戶端(UA)通過(guò)中介服務(wù)器連接到Web服務(wù)器的通訊路徑如圖所示,客戶端與Web服務(wù)器之間的通訊通過(guò)中介服務(wù)器進(jìn)行轉(zhuǎn)發(fā),中介服務(wù)器可能有1個(gè),也可能有多個(gè)。
![](/upload/attach/202011/202011241037_BJ7S452FJXZAYKX.jpg)
* 客戶端(UA)到中介服務(wù)器的通訊路徑如圖所示,客戶端將請(qǐng)求發(fā)送給中介服務(wù)器1,中介服務(wù)器1將其發(fā)送中介服務(wù)器2,中介服務(wù)器2再發(fā)給Web服務(wù)器,最后客戶端收到的內(nèi)容由中介服務(wù)器1發(fā)送給它,而不是Web服務(wù)器。
![](/upload/attach/202011/202011241037_HCVB68MD2FSUXZK.jpg)
**內(nèi)部操作過(guò)程:**
如圖所示,它分為四個(gè)步驟:建立連接、發(fā)出請(qǐng)求信息、發(fā)出響應(yīng)信息、關(guān)閉連接。
![](/upload/attach/202011/202011241037_DHPS2AKFWF4W5J3.jpg)
## 小知識(shí):
HTTP默認(rèn)端口號(hào)為80,但是也可以改為8080或者其他端口。
## HTTP傳輸展示
![](/upload/attach/202011/202011231653_NP4DVBYRBSBRHGU.png)
## HTTP注意事項(xiàng):
* HTTP是無(wú)連接:無(wú)連接的含義是限制每次連接只處理一個(gè)請(qǐng)求。服務(wù)器處理完客戶的請(qǐng)求,并收到客戶的應(yīng)答后,即斷開(kāi)連接。采用這種方式主要考慮到WWW服務(wù)器面向的是Internet中成干上萬(wàn)個(gè)用戶,且只能提供有限個(gè)連接,故服務(wù)器不會(huì)讓一個(gè)連接處于等待狀態(tài),及時(shí)地釋放連接可以大大提高服務(wù)器的執(zhí)行效率。
* HTTP是一種面向?qū)ο蟮膮f(xié)議:允許傳送任意類(lèi)型的數(shù)據(jù)對(duì)象。它通過(guò)數(shù)據(jù)類(lèi)型和長(zhǎng)度來(lái)標(biāo)識(shí)所傳送的數(shù)據(jù)內(nèi)容和大小,并允許對(duì)數(shù)據(jù)進(jìn)行壓縮傳送。
* HTTP是無(wú)狀態(tài):HTTP協(xié)議是無(wú)狀態(tài)協(xié)議。無(wú)狀態(tài)是指協(xié)議對(duì)于事務(wù)處理沒(méi)有記憶能力。缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息,則它必須重傳,這樣可能導(dǎo)致每次連接傳送的數(shù)據(jù)量增大。另一方面,在服務(wù)器不需要先前信息時(shí)它的應(yīng)答就較快。
# HTTP隱患
因HTTP在設(shè)計(jì)之初未深入考慮安全問(wèn)題,它只是未解決數(shù)據(jù)傳輸和共享問(wèn)題而設(shè)計(jì)。但被有心人惡意利用后就發(fā)現(xiàn)了一些安全隱患,部分隱患展示:
* 明文傳輸隱患
因HTTP傳遞的數(shù)據(jù)是不經(jīng)過(guò)處理的,也就是常說(shuō)的明文傳輸,不會(huì)加密這些信息,并因HTTP是基于TCP/IP的,TCP/IP的特點(diǎn)也決定了HTTP數(shù)據(jù)很容易被截獲,只要攻擊者能夠捕獲這些信息,用戶的隱私就暴露在攻擊者眼中(在不違法Web標(biāo)準(zhǔn)的情況下)。
![](/upload/attach/202011/202011231719_JAU7V6XFG3BVGCQ.png)
* 身份驗(yàn)證隱患
因在HTTP標(biāo)準(zhǔn)中,沒(méi)有校驗(yàn)對(duì)方身份的標(biāo)準(zhǔn),無(wú)法有效的驗(yàn)證雙方是本人故易被攻擊者偽造進(jìn)行惡意攻擊。
![](/upload/attach/202011/202011231718_U736TUXKCGJ42UE.png)
* 數(shù)據(jù)完整性隱患
因HTTP數(shù)據(jù)在傳輸過(guò)程中,會(huì)經(jīng)過(guò)很多節(jié)點(diǎn),這些節(jié)點(diǎn)都可以修改原始數(shù)據(jù),而對(duì)于客戶端和服務(wù)器來(lái)說(shuō),沒(méi)有任何技術(shù)來(lái)確保接收的數(shù)據(jù)就是發(fā)送者發(fā)送的原始數(shù)據(jù),這樣就存在了被篡改的隱患。
![](/upload/attach/202011/202011231710_8QUQB2KPN5TBF7R.png)
# 參考資料
* 《HTTP百度百科》
* 《HTTPS教程》
* 《深入淺出HTTPS:從原理到實(shí)戰(zhàn)》
* 《HTTP網(wǎng)頁(yè)訪問(wèn)應(yīng)用分析》