2011-05-26 83 views
6

我的一個應用程序連接到通常安裝在不同計算機上的服務器模塊,有時在互聯網上。在某些部署方案中,用戶不能直接訪問互聯網 - 只能使用HTTP(s)代理服務器。所以我需要教我的程序使用HTTP代理來模擬到服務器的異步TCP連接。互聯網上有很多關於這個主題的信息,並且使用HTTPS代理非常簡單 - 只需將「HTTP CONNECT」發送到服務器應用的端口443,發回響應,並且可以根據需要發送和接收二進制數據。通過HTTP(s)代理模擬TCP連接的正確方法是什麼?

但是,有些用戶在代理服務器上禁用了HTTPS,因此他們只有HTTP。並且由於代理主動檢查流量,試圖緩存它,積累等等,HTTP存在許多問題。具有一個無限「GET」HTTP請求和一個無限HTTP響應的2個連接起作用,但不同的代理提供了不同的問題 - 例如,微軟IIS不會立即發送小塊數據並試圖累積它們:(。

所以我的問題是:它是一種很好的技術來模擬通過HTTP代理的全雙工TCP連接,而不支持HTTPS?也許這是一些開源或商業實現存在,我可以使用或購買?任何提示是值得歡迎的!我真的不想創建一個解決方案,只能在少量的代理上工作,所以我需要已經存在和測試的實現或好手工:)。

回答

3

有幾種現有的解決方案來仿真HTTP上的長期TCP連接。

在XMPP的情況下廣泛使用的技術之一是BOSH specification。雖然BOSH最初是由Jabber/XMPP社區開發的,但它不僅限於XMPP,還可以傳輸XML或JSON等任意有效載荷。

這裏有其他有用的資源:

4

這是關於SO的其他幾個問題。

一般而言,您不能假設HTTP代理將允許您通過連接進行TCP/IP流式傳輸。這已經在HTML5 WebSockets工作組中詳細討論過了。

在某些情況下,您可以使用CONNECT謂詞進行HTTP請求,要求代理生成到目標服務器/端口組合的「盲」雙向隧道。但是,代理可能會拒絕爲443以外的任何目標端口(爲了防止您正在嘗試執行的操作)執行此操作,並且代理可以嘗試掃描或以其他方式更改發送給它的流量。

相比之下,SOCKS代理旨在完成您正在嘗試執行的操作。但SOCKS代理相對不常見。

+0

這個HTML5 WebSockets的工作組討論的任何鏈接? – grigoryvp 2011-05-31 10:10:47

相關問題