我想實現和HTTP代理服務器來深入瞭解協議的一些細節點,並學習一些套接字編程,但我不想實現全面的HTTP服務器。如果我只想實現代理,那麼我應該關注哪些相關的RFC頁面和部分?實現一個HTTP代理
該計劃是從一個普通的HTTP代理開始,然後可能將其擴展到HTTPS代理。
我想實現和HTTP代理服務器來深入瞭解協議的一些細節點,並學習一些套接字編程,但我不想實現全面的HTTP服務器。如果我只想實現代理,那麼我應該關注哪些相關的RFC頁面和部分?實現一個HTTP代理
該計劃是從一個普通的HTTP代理開始,然後可能將其擴展到HTTPS代理。
您可能還會發現IETF中HTTPbis組的工作很有幫助;我們正在重寫這些規範,以使它們更加清晰易用。
請參閱 http://trac.tools.ietf.org/wg/httpbis/trac/wiki 瞭解更多信息。
我目前正在研究它。基本的實現很簡單。監聽套接字端口,找到主機,連接到遠程服務器,發送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
使用這個信息我嘗試在NodeJS中獲得混合結果的SSL隧道。我不認爲我足夠接近連接,並且NodeJS默認處理規則似乎不支持此協議。請參閱:https://github.com/pinf/pinf-proxy-js/issues/1 – cadorn
@strongwillow處理http cookie的情況如何?具體而言,由於代理服務器是遠程服務器的角度來看的客戶端,Cookie是否會在代理服務器上以及在呼叫客戶端上丟失? – Howiecamp
@Howiecamp對Cookies沒有特殊待遇,因爲它只是一個普通的HTTP標頭。 – strongwillow
RFC3986廢止2396而回。 822被2822替換,但我不建議看它(或1521),因爲HTTP不是MIME;它只是MIME的。 –