Http代理的原理
代理服務器會自動提取請求數據包中的HTTP請求數據
發送給服務端,并將服務端的HTTP響應數據
轉發給發送請求的客戶端,HTTP代理服務器使用的端口通常是8080。
- 對于Web客戶端來說,代理扮演的服務器角色,接收請求(Request),返回響應(Response)
- 對于Web服務器來說,代理扮演的客戶端角色,發送請求(Request),接收響應(Response)
HTTP 代理步驟
客戶端
向代理
發起TCP連接
;- 代理接收客戶端的連接,雙方
建立連接
; 客戶端
向代理
發送HTTP請求
,請求內容和沒有HTTP代理的內容完全相同;- 代理
解析HTTP請求
; 代理
向服務器
發起TCP連接
;服務器
接收代理
的連接;代理
向服務器
發送HTTP
請求(這個HTTP請求是基于用戶的HTTP請求,可能會有修改
)服務器
發送響應
給代理
;代理
發送響應
給發送請求的客戶端
;
不同HTTP代理的區別
- 全匿名代理,不改變客戶端的request fields(請求信息),使服務器端看來就像有個真正的客戶瀏覽器在訪問。客戶端的真實IP是隱藏起來的。
- 普通匿名代理,能隱藏客戶端的真實IP,但會更改客戶端的request fields(請求信息),服務器端有可能會被認為使用了代理。
- 透明代理(簡單代理),改變客戶端的request fields(請求信息),并會傳送真實IP地址。
HTTPS代理
HTTPS代理有多種做法,通常使用CONNECT method
,通過proxy建立一條隧道(隧道代理),這樣,proxy無法解密數據
;此外,還有一種類似于中間人攻擊的代理手法。
CONNECT方法代理步驟
客戶端
向代理
發起CONNECT
請求;代理
向服務端
發起TCP
連接請求;- 當TCP連接建立完成后,?
代理
向客戶端
返回HTTP/1.0 OK
,隧道建立完成; 代理
轉發客戶端
的數據給服務器
,轉發服務器
的數據給客戶端
,直到任何一方連接結束;
可參考HTTP、HTTPS代理分析及原理