簡體   English   中英

HTTP代理服務器保持活動連接支持

[英]HTTP Proxy Server keep-alive connection support

我目前正在開發一種支持保持活動連接的多線程代理服務器。 在處理來自Firefox瀏覽器的請求時,我看到一些奇怪的問題。 我使用localhost:10001 / http:// url連接到本地代理,並且可以訪問該主機上的所有鏈接。 過程如下。 1.創建一個套接字,將其綁定到端口10001。2.接受連接,如果客戶端已連接,則fork()3.繼續將客戶端請求作為持久連接進行處理。

現在的問題是,當我在Firefox中打開新標簽頁以使用localhost:10001 / http:// url2訪問具有不同主機的第二個url時,奇怪的是,該請求轉到了第一次連接期間創建的客戶端套接字連接。 我最初以為這可能是由於我的代碼造成的,但是后來我嘗試使用telnet進行相同的操作,所有新連接都會創建一個單獨的進程。 是否有使Firefox瀏覽器執行此操作的任何特定設置?

HTTP保持活動是一種將基礎TCP連接重用於多個請求的方法,因此,人們可以一直跳過創建新TCP連接的開銷。 由於連接的目標始終是相同的,因此對於瀏覽器來說,重用同一TCP連接是有意義的。 與telnet的比較存在缺陷,因為使用telnet時常會建立新的TCP連接。

如果HTTP版本指定使用HTTP keep-alive,則Connection標頭以及服務器和客戶端的行為。 服務器和客戶端都可以在請求完成后的任何時間決定關閉空閑連接,即,不需要在請求完成后使其保持打開狀態。 另外,他們可以使用Connection: keep-alive HTTP標頭來表示Connection: keep-alive打開Connection: keep-alive或者在請求Connection: close之后希望關閉Connection: close 這些標頭具有默認值,具體取決於HTTP版本,即除非明確指定,否則keep-alive在HTTP / 1.1上打開,而在HTTP / 1.0上關閉。

除了使用URL之類的http://proxy/real-url實現的“代理”之外,它不是真正的HTTP代理。 實際的HTTP代理將配置為瀏覽器內的代理,並且您使用的URL將保持不變,這也意味着代理不需要進行URL重寫。 更糟糕的是,您對代理的想法有效地合並了同一來源內的所有主機(即來源是代理),從而有效地禁用了瀏覽器的主要安全概念: 同源策略 例如,這意味着某些流氓廣告服務器將與您的實現共享ebay的來源,從而可以訪問ebay cookie並劫持會話並將其誤用於身份盜用

HTTP持久連接也與代理一起使用,而不僅與目標一起使用。

對於firefox,您可以嘗試通過將network.http.proxy.version設置為1.0來更改代理的行為。 但是您必須增強您的代理服務器(也許完全重新考慮其內部工作原理)才能處理這些重用的連接。 我確定它不僅限於Firefox。

另外,請確保您的代理服務器不會以HTTP / 1.1應答,因為不是。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM