自我學習HTTP協議

jialebaba發表於2017-12-21

1.HTTP簡介

是超文字傳輸協議,是基於TCP協議來傳輸資料,屬於物件導向的協議。

2.主要特點

  1. 速度快,常用請求方式有GET,POST,每種方法規定了客戶與伺服器聯絡的型別不同。

  2. 靈活:允許傳輸任意型別的資料。

  3. 無連線:每次連線只處理一次請求。

  4. 無狀態:對事務處理沒有記憶能力,會導致處理後續資料需要前面的資料,,則需要重傳,可能導致資料量增大。

3.GET和POST的區別

  1. GET提交資料會把資料附在URL後面(把資料放在HTTP協議頭中),POST請求會把資料放到PHTTP包體中
  2. GET提交有資料大小的限制,POST理論不受限制(為受WEB伺服器規定限制)
  3. POST更安全<安全不到哪兒去>
  4. GET一般執行請求資料的操作,POST執行運算元據的操作。

4.HTTP工作原理

  1. 客服端連線到服務端:一個HTTP客戶端與伺服器的HTTP埠(預設80)建立一個TCP套接字連線(?不懂,待研究)
  2. 傳送HTTP請求:通過TCP套接字客服端向服務端傳送一個文字請求報文,報文包括請求行,請求頭部,空行,請求資料組成
  3. 伺服器接受請求並返回HTTP響應:伺服器解析請求,定位請求資源,將資源複本寫到TCP套接字,又客戶端讀取,一個響應由:狀態行,響應頭部,空行,響應資料組成
  4. 釋放TCP連線:若connection為close,則伺服器主動關閉TCP連線,客服端被動關閉連線,TCP連線釋放;ruoconnection為keepalive,則連線會保持一會,在保持時間內可以繼續接受請求
  5. 客戶端解析HTML內容:首先解析狀態行,檢視是否請求成功,後解析每一個響應頭。

HTTP缺陷

通訊使用明文<不加密>,內容可能被竊聽

防範方式:

  1. HTTPS,HTTP通過和SSL/TLS的組合使用,加密HTTP的通訊內容。
  2. 將HTTP參與通訊的內容本身進行加密<內容可能被篡改>

不驗證通訊方身份,身份可能被偽造

HTTP協議通訊時,不存在確認通訊方身份的步驟,所有人都可以發起請求,伺服器都會響應請求。 解決方法:SSL證書手段,用於確定通訊方

無法證明報文的完整性,有可能被篡改

防止篡改方法:MD5/SHA-1等校驗,無妨確保正確。

HTTPS

HTTPS = HTTP + 加密 + 認證 + 完整性保護,除HTTP 其他操作在SSL/TLS協議進行,換言之,HTTPS是HTTP通訊介面用SSL/TLS協議代替。

SSL

SSL 採用一種公開金鑰加密的加密處理方式,加密演算法是公開的,金鑰是保密的。

對稱金鑰加密:採用一個金鑰加密解密的方式,共享金鑰<金鑰不能保證安全>。 非對稱金鑰加密:一把公開金鑰,一把私有金鑰,公開金鑰加密,私有金鑰解密。

HTTPS:採用共享金鑰加密和公開金鑰加密兩者並用的混合加密機制。在交換金鑰時用公開金鑰,之後用共享金鑰加密方式<公開金鑰速度慢>。

SSL證書

  1. 公開金鑰的正確性無法驗證,所以需要正經的機構頒發的公開金鑰證書<EVSSL證書>。
  2. 使用客戶端證書,來驗證伺服器通訊的對方始終是預料之內的客戶端。
  3. 自簽名證書,由自認證機構頒發的證書<無法消除偽裝可能性>。

HTTPS通訊步驟

  1. 客戶端傳送ClientHello報文開始SSL通訊,報文中包含客戶端支援的SSL的指定版本、加密元件、列表<使用的加密演算法、金鑰長度等>。
  2. 服務端進行SSL通訊,返回Server Hello報文應道。報文中包含SSL版本和加密元件<從客戶端加密元件內篩選>。
  3. 服務端傳送Certificate報文。報文包含公開金鑰證書。
  4. 伺服器傳送Server Hello Done報文通知客戶端最初SLL握手協商結束。
  5. 客戶端傳送Client Key Exchange報文回應。報文中包含加密通訊中使用的隨機密碼串,已被公開金鑰加密。
  6. 客戶端繼續傳送Change Cipher Spec報文。報文提示伺服器以後採用Pre-master secret金鑰加密。<更換到共享加密>。
  7. 客戶端傳送Finished報文。
  8. 伺服器傳送Change Cioher Spec報文。
  9. 伺服器傳送Finished報文。
  10. 服務端和客戶端Finished報文交換之後,SSL連線建立完成。此後進行HTTP請求。
  11. 應用層協議通訊。傳送HTTP響應。
  12. 最後客戶端斷開連結,傳送close_notify報文。之後傳送TCP FIN報文關閉TCP的通訊。

相關文章