※HTTP 隧道※算法
--------瀏覽器
HTTP是基於文本的經過瀏覽器檢索網頁的協議。 大多數狀況下你躲在代理服務器的後面,經過LAN接入互聯網。 在IE的Connection Option中, 你給出你的LAN的設置。 這個代理服務器運行着基於文本的協議, 你從它那裏能夠獲得外界的網絡HTTP相關的數據。是的, 用HTTP經過它上面的小的望孔能夠鏈接到外部世界, 並用二進制協議獲得你想要的數據, 或者甚至是你的協議。 它經過HTTP。緩存
※HTTPS 解釋※安全
---------服務器
在HTTPS中, 數據以一種安全的方式從瀏覽器到服務器和從服務器到瀏覽器。 它是二進制的協議; 當他穿過代理時, 代理不知道是什麼。 代理僅僅容許二進制流打開, 讓服務器和客戶二者之間交換數據。 代理服務器認爲咱們在進行某個安全的會話。網絡
對於HTTPS, 你的瀏覽器鏈接到代理服務器,並送出一個命令編碼
CONNECT neurospeech.com:443 HTTP/1.0 <CR><LF>加密
HOST neurospeech.com:443<CR><LF>操作系統
【...若是須要,HTTP頭部的其它行以<CR><LF>結束 】代理
<CR><LF> // 最後的空行
接下來, 代理服務器把它做爲某個HTTP安全會話, 打開一個到需求服務器和端口的二進制流。 若是鏈接確立, 代理服務器返回以下回應:
HTTP/1.0 200 Connection Established<CR><LF>
【...忽略全部HTTP頭部的其它行以<CR><LF>結束,】
<CR><LF> // 最後的空行
如今, 瀏覽器鏈接到了終端服務器, 能夠用二進制和安全的方式交換數據了。
寧任聲 14:45:05
經過HTTP協議與代理服務器創建鏈接,協議信令中包含要鏈接到的遠程主機的IP和端口號,若是有須要身份驗證的話還須要加上受權信息,服務器收到信令後首先進行身份驗證,經過後便與遠程主機創建鏈接,鏈接成功以後會返回給客戶端200,表示驗證經過,就這麼簡單,下面是具體的信令格式:
CONNECT 124.xxx.xxx.xx:443 HTTP/1.1 //創建http隧道要443端口
Proxy-Connection: Keep-Alive //客戶端到服務器端的鏈接持續有效
Content-Length: 0
Host: 124.xxx.xxx.xx //主機地址
Proxy-Authorization:Basic YTph //身份驗證信息
User-Agent: OpenFetion //能夠標識請求者的信息,如什麼瀏覽器類型和版本、操做系統、使用語言等信息
其中Proxy-Authorization是身份驗證信息,Basic後面的字符串是用戶名和密碼組合後進行base64編碼的結果,也就是對username:password進行base64編碼。
其實編碼對安全性沒什麼意義,base64嚴格意義上都已經不能算是加密了,如今信息安全這麼受重視的年代,不須要密鑰的加密算法仍是叫編碼更貼切一些,抓到這種包以後瞬間就能夠獲得用戶名和密碼。
HTTP/1.0 200 Connection established
客戶端收到收面的信令後表示成功創建鏈接,接下來要發送給遠程主機的數據就能夠發送給代理服務器了,代理服務器創建鏈接後會在根據IP地址和端口號對應的鏈接放入緩存,收到信令後再根據IP地址和端口號從緩存中找到對應的鏈接,將數據經過該鏈接轉發出去。