2012-06-04 54 views
1

我想實現和HTTP代理服務器來深入瞭解協議的一些細節點,並學習一些套接字編程,但我不想實現全面的HTTP服務器。如果我只想實現代理,那麼我應該關注哪些相關的RFC頁面和部分?實現一個HTTP代理

該計劃是從一個普通的HTTP代理開始,然後可能將其擴展到HTTPS代理。

回答

3
+1

RFC3986廢止2396而回。 822被2822替換,但我不建議看它(或1521),因爲HTTP不是MIME;它只是MIME的。 –

3

我目前正在研究它。基本的實現很簡單。監聽套接字端口,找到主機,連接到遠程服務器,發送http頭,從服務器接收recv,然後發送回客戶端。困難的部分是一致的連接和流水線。

至於HTTPS,其標頭是這樣的:

CONNECT addons.mozilla.org:443 HTTP/1.1 
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:18.0) Gecko/20100101 Firefox/18.0 
Host: addons.mozilla.org 

代理應該連接到服務器,然後回覆客戶端200的消息,然後重定向來回作爲重定向器。

檢查:http://tools.ietf.org/html/draft-luotonen-ssl-tunneling-03

+0

使用這個信息我嘗試在NodeJS中獲得混合結果的SSL隧道。我不認爲我足夠接近連接,並且NodeJS默認處理規則似乎不支持此協議。請參閱:https://github.com/pinf/pinf-proxy-js/issues/1 – cadorn

+0

@strongwillow處理http cookie的情況如何?具體而言,由於代理服務器是遠程服務器的角度來看的客戶端,Cookie是否會在代理服務器上以及在呼叫客戶端上丟失? – Howiecamp

+0

@Howiecamp對Cookies沒有特殊待遇,因爲它只是一個普通的HTTP標頭。 – strongwillow