簡體   English   中英

HTTP代理連接共享

[英]HTTP proxy connection sharing

我正在嘗試使用與Java瀏覽器使用Netty框架的Web瀏覽器用來模擬全雙工連接的技術類似的技術來實現HTTP隧道。 我希望以一種可以在真實的HTTP代理存在的情況下工作的方式來實現它。 我試圖在不使用servlet容器的情況下執行此操作,以避免在庫依賴方面造成不必要的開銷,並且因為servlet API不適合全雙工http隧道的使用模式。

我知道HTTP代理施加的一些限制會“破壞” HTTP協議的某些潛在用途:

  1. 除了客戶端和代理之間的連接之外,可能不支持HTTP管道。 即,即使客戶端已向代理分發了多個管道請求,代理也可以發送單個請求並在發送下一個請求之前等待響應。
  2. 塊編碼可能不會超出代理之間的連接以類似的方式接受:服務器可以分塊發送回響應,但是代理可以在將完整的分塊響應分派給客戶端之前等待結束塊。
  3. HTTP CONNECT通常僅允許用於SSL / TLS端口,通常僅允許使用端口443,因此,不能將其用作偷偷摸摸的方式來獲得與外界的不受限制的TCP連接。

但是,我不確定還有另一種可能性:現實中的HTTP代理是否還在多個客戶端之間共享與服務器的持久連接? 例如:

  • 客戶端A向服務器X發送請求A1,A2和A3
  • 客戶端B向服務器X發送請求B1和B2
  • 客戶端C向服務器X發送請求C1,C2和C3

代理然后可能會打開與服務器X的單個連接並按以下順序發送消息:

A1,A2,B1,C1,B2,A3,C2,C3

或保留每個客戶的訂購但可能交錯的類似訂單? 甚至更糟的是,代理是否可以打開與服務器的多個連接,並在連接之間分散來自每個客戶端的消息,即

Connection 1: A1, C1, C2, C3
Connection 2: B1, B2, A2, A3

如果是這樣,我的方法需要更多的思考,因為我潛在地需要將這些消息多路分解到每個隧道的不同隊列中,並且不能簡單地依賴於將連接標識為用於特定客戶端。

是否有人知道任何描述常用HTTP代理和狀態檢查防火牆的怪癖的好資源?

HTTP 1.1規范將此段作為8.1.4實際考慮事項

使用持久連接的客戶端應該限制它們與給定服務器同時維護的連接數量。 單用戶客戶端不應與任何服務器或代理保持2個以上的連接。 代理最多應使用2 * N個連接到另一個服務器或代理的連接,其中N是同時活動用戶的數量。 這些准則旨在縮短HTTP響應時間並避免擁塞。

但是,我不知道現實世界中的代理實現會如何處理此要求。

也許您會在“ 緩存教程”中找到某些內容,即使它只是有用的鏈接。 最終的措施可能是向Mark Nottingham(mnot@pobox.com)發送郵件。 如果他不知道,沒人會。

我確實知道,可以將NetScaler配置為在它和服務器之間使用keepalive,而不管客戶端上的keepalive設置如何。

暫無
暫無

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

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