[toc]
# HTTP簡介
HTTP協(xié)議(HyperText Transfer Protocol,超文本傳輸協(xié)議)是因特網(wǎng)上應用最為廣泛的一種網(wǎng)絡傳輸協(xié)議,它基于TCP/IP通信協(xié)議來傳遞數(shù)據(jù)(HTML 文件, 圖片文件, 查詢結果等)。
# HTTP 工作原理
HTTP協(xié)議工作于客戶端-服務端架構上。

## HTTP信息處理過程:
**此為典型案例:**
(1)客戶與服務器建立連接;
(2)客戶向服務器提出請求;
(3)服務器接受請求,并根據(jù)請求返回相應的文件作為應答;
(4)客戶與服務器關閉連接。
**宏觀工作方式:**
* 客戶端(UA)直接連接到Web服務器的通訊路徑如圖所示,客戶端與Web服務器之間的通訊不需要任何的中介服務器,這是最簡單的情況。

* 客戶端(UA)通過中介服務器連接到Web服務器的通訊路徑如圖所示,客戶端與Web服務器之間的通訊通過中介服務器進行轉發(fā),中介服務器可能有1個,也可能有多個。

* 客戶端(UA)到中介服務器的通訊路徑如圖所示,客戶端將請求發(fā)送給中介服務器1,中介服務器1將其發(fā)送中介服務器2,中介服務器2再發(fā)給Web服務器,最后客戶端收到的內(nèi)容由中介服務器1發(fā)送給它,而不是Web服務器。

**內(nèi)部操作過程:**
如圖所示,它分為四個步驟:建立連接、發(fā)出請求信息、發(fā)出響應信息、關閉連接。

## 小知識:
HTTP默認端口號為80,但是也可以改為8080或者其他端口。
## HTTP傳輸展示

## HTTP注意事項:
* HTTP是無連接:無連接的含義是限制每次連接只處理一個請求。服務器處理完客戶的請求,并收到客戶的應答后,即斷開連接。采用這種方式主要考慮到WWW服務器面向的是Internet中成干上萬個用戶,且只能提供有限個連接,故服務器不會讓一個連接處于等待狀態(tài),及時地釋放連接可以大大提高服務器的執(zhí)行效率。
* HTTP是一種面向對象的協(xié)議:允許傳送任意類型的數(shù)據(jù)對象。它通過數(shù)據(jù)類型和長度來標識所傳送的數(shù)據(jù)內(nèi)容和大小,并允許對數(shù)據(jù)進行壓縮傳送。
* HTTP是無狀態(tài):HTTP協(xié)議是無狀態(tài)協(xié)議。無狀態(tài)是指協(xié)議對于事務處理沒有記憶能力。缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數(shù)據(jù)量增大。另一方面,在服務器不需要先前信息時它的應答就較快。
# HTTP隱患
因HTTP在設計之初未深入考慮安全問題,它只是未解決數(shù)據(jù)傳輸和共享問題而設計。但被有心人惡意利用后就發(fā)現(xiàn)了一些安全隱患,部分隱患展示:
* 明文傳輸隱患
因HTTP傳遞的數(shù)據(jù)是不經(jīng)過處理的,也就是常說的明文傳輸,不會加密這些信息,并因HTTP是基于TCP/IP的,TCP/IP的特點也決定了HTTP數(shù)據(jù)很容易被截獲,只要攻擊者能夠捕獲這些信息,用戶的隱私就暴露在攻擊者眼中(在不違法Web標準的情況下)。

* 身份驗證隱患
因在HTTP標準中,沒有校驗對方身份的標準,無法有效的驗證雙方是本人故易被攻擊者偽造進行惡意攻擊。

* 數(shù)據(jù)完整性隱患
因HTTP數(shù)據(jù)在傳輸過程中,會經(jīng)過很多節(jié)點,這些節(jié)點都可以修改原始數(shù)據(jù),而對于客戶端和服務器來說,沒有任何技術來確保接收的數(shù)據(jù)就是發(fā)送者發(fā)送的原始數(shù)據(jù),這樣就存在了被篡改的隱患。

# 參考資料
* 《HTTP百度百科》
* 《HTTPS教程》
* 《深入淺出HTTPS:從原理到實戰(zhàn)》
* 《HTTP網(wǎng)頁訪問應用分析》