1. 程式人生 > >HTTP隧道解決的問題

HTTP隧道解決的問題

多個 code size 成功 crlf eas encrypt fill 空行

轉自別人的文章:https://blog.csdn.net/gogzf/article/details/78385506

  • 客戶端通常會用 Web 代理服務器代表它們來訪問 Web 服務器。比如,很多公司都會在公司網絡和公共因特網的安全邊界上放置一個代理。代理是防火墻路由器唯一允許進行 HTTP 流量交換的設備,它可能會進行病毒檢測或其他的內容控制工作。
    技術分享圖片
  • 但只要客戶端開始用服務器的公開密鑰對發往服務器的數據進行加密,代理就再也不能讀取 HTTP 首部了。代理不能讀取 HTTP 首部,就無法知道應該將請求轉向何處了。
    技術分享圖片
  • 為了使 HTTPS 與代理配合工作,要進行幾處修改以告知代理連接到何處。
  • 一種常用的技術就是 HTTPS SSL 隧道協議。使用 HTTPS 隧道協議,客戶端首先要告知代理,它想要連接的安全主機和端口。這是在開始加密之前,以明文形式告知的,所以代理可以理解這條信息。
  • HTTP 通過新的名為 CONNECT 的擴展方法來發送明文形式的端點信息。CONNECT 方法會告訴代理,打開一條到所期望主機和端口號的連接。這項工作完成之後,直接在客戶端和服務器之間以隧道形式傳輸數據。CONNECT 方法就是一條單行的文本命令,它提供了由冒號分隔的安全原始服務器的主機名和端口號。host:port 後面跟著一個空格和 HTTP 版本字符串,再後面是 CRLF。接下來是零個或多個 HTTP 請求首部行,後面跟著一個空行。空行之後,如果建立連接的握手過程成功完成,就可以開始傳輸 SSL 數據了。
CONNECT home.netscape.com:443 HTTP/1.0
User-agent: Mozilla/1.1N

<raw SSL-encrypted data would follow here...>
  • 1
  • 2
  • 3
  • 4
    • 在請求中的空行之後,客戶端會等待來自代理的響應。代理會對請求進行評估,確保它是有效的,而且用戶有權請求這樣一條連接。如果一切正常,代理會建立一條到目標服務器的連接。如果成功,就向客戶端發送一條 200 Connection Established 響應。
      HTTP/1.0 200 Connection established
      Proxy-agent: Netscape-Proxy/1.1

HTTP隧道解決的問題