1. 程式人生 > >圖解HTTP筆記(待補充)

圖解HTTP筆記(待補充)

http

  • http報文:報文首部 cr+lf 報文主體

  • 請求報文:請求行 請求首部 通用首部 實體首部

    方法 說明 支援的HTTP協議版本
    GET 獲取資源 接收的請求正在處理
    POST 傳輸實體主體 1.0、1.1
    PUT 傳輸檔案 1.0、1.1
    HEAD 獲得報文首部 1.0、1.1
    DELETE 刪除檔案 1.0、1.1
    OPTIONS 詢問支援的方法 1.1
    TRACE 追蹤路徑 1.1
    CONNET 要求用隧道協議連結代理 1.1
    LINK 建立和資源之間的聯絡 1.0
    UNLINK 斷開連線關係 1.0
  • 響應報文:響應行 響應首部 通用首部 實體首部

    狀態碼 類別 原因短語
    1xx Informational(資訊性狀態碼) 接收的請求正在處理
    2xx Success(成功狀態碼) 請求正常處理完畢
    3xx Redirection(重定向狀態碼) 需要進行附加操作以完成請求
    4xx Client Error(客戶端錯誤狀態碼) 服務端無法正常處理請求
    5xx Server Error(伺服器錯誤狀態碼) 伺服器處理請求出錯
  • 報文主體≈實體主體,傳輸中進行編碼操作時,實體主體的內容發生變化,才導致它與報文主體有差異。

  • 內容編碼壓縮

    • gzip(GNU zip)
    • compress(UNIX系統的標準壓縮)
    • deflate(zlib)
    • identity(不進行編碼)
  • 分塊傳輸編碼(Chunked Transfer Coding):將實體主體分成多個部分(塊)。每一塊都會用十六進位制來標記塊的大小,而實體主體的最後一塊會使用“0(CR+LF)”來標記。

  • MIME

  • 範圍請求(Range Request):獲取部分內容的請求。Range: bytes = 5000-10000

  • 請求首部

  • 響應首部

https

http缺點:

  • 通訊使用明文,內容易竊聽
  • 不驗證通訊方身份,易偽裝
  • 不證明報文完整性,易篡改


防護手段

  • 加密:對稱/非對稱,金鑰,公開金鑰加密,共享金鑰加密
  • 認證:證明公開金鑰正確的證書,公鑰證書,CA(數字證書認證機構)
  • 摘要:MAC(Message Authentication Code)
  • 預置證書:客戶端會預置一些公鑰證書

安全通道建立

Client 方向 Server
①Handshake:ClientHello ——————> 客戶端支援的SSL的指定版本,加密元件列表(加密演算法和金鑰長度)
SSL的指定版本,加密元件。加密元件是從客戶端篩選出來的 <—————— ②Handshake:ServerHello
公開金鑰證書 <—————— ③Handshake:Certificate
最初協商(第一次握手)結束 <—————— ④Handshake:ServerHelloDone
⑤Handshake:ClientKeyExchange ——————> 包含Pre-master secret隨機字串,並使用③的證書加密
⑥ChangeCipherSpec ——————> 提示伺服器,此報文之後會使用Pre-master secret金鑰加密
⑦Handshake:Finished ——————> 包含連線至今全部報文的整體校驗值。協商是否成功以伺服器能否正確解密該報文為準
<—————— ⑧ChangeCipherSpec
<—————— ⑨Handshake:Finished
⑩Application Data(HTTP) ——————> 傳送HTTP請求
傳送HTTP響應 <—————— ⑪Application Data(HTTP)
⑫Alert:warning, close notify ——————> 這步之後再發送TCP_FIN來關閉TCP連線

以上流程會生成MAC(Message Authenticagtion Code)的報文摘要。MAC能夠查知報文是否被篡改,從而保護報文的完整性。

下圖是對整個流程的圖解。
http://baimoz.me/wp-content/uploads/2018/04/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7-2018-04-17-%E4%B8%8A%E5%8D%8811.49.37.png

http追加協議

HTTP瓶頸

  • 一條連線上只可傳送一個請求
  • 請求只能從客戶端開始。客戶端不可以接收出相應以外的指令
  • 請求/響應首部未經壓縮就傳送。首部資訊越多延遲越大
  • 傳送冗長的首部。每次互相傳送相同的首部造成的浪費較多
  • 可任意選擇資料壓縮格式。非強制壓縮傳送

SPDY

  • 多路複用流:通過單一的TCP連結,可以無限制處理多個HTTP請求
  • 賦予請求優先順序
  • 壓縮HTTP首部:壓縮HTTP請求和響應的首部
  • 推送功能:伺服器主動向客戶端推送資料
  • 伺服器提示功能

HTTP/2.0

方案

  • SPDY
  • HTTP Speed + Mobility
  • Network-Friendly HTTP Upgrade