簡體   English   中英

如何知道何時在HTTP代理連接中停止數據隧道傳輸

[英]How to know when to stop data tunneling in HTTP proxy connection

我正在嘗試編寫自己的HTTP代理服務器,但對協議有疑問。

首先,我想提一下,我正在使用此頁面作為參考。 我認為這是准確的,但也是從1998年開始的。如果有人對我有更好的參考,我將不勝感激。

因此,基本上我了解到連接始於握手。 我收到一個CONNECT請求,代理授權等。然后,我連接到該請求的資源URI中指定的主機和端口。 然后,我發送一條狀態行,理想情況下是HTTP/1.1 200 Connection established ,然后是一些標頭和一個CRLF(如正常)。

一旦握手完成,我的客戶端和客戶端要求的主機便通過代理服務器連接。 我應該雙向傳輸數據,這很有意義,因為我可以通過基於HTTP的代理連接支持任何類型的基於TCP的協議,包括HTTPS甚至WebSocket。

對我來說沒有意義的是我如何知道何時停止。 如果此代理確實可以支持任何基於TCP的協議,那么我不知道如何知道交互何時結束。 HTTP消息將是簡單的兩步讀寫操作,HTTPS交互將涉及多個此類交換,而WebSocket交互將無限地涉及許多交換。

我不是在尋求完美的解決方案。 我對一些實用的事情(例如超時)感到滿意,但是我想知道什么標准的最佳實踐才能盡我所能地完成此項目。

感謝大家的幫助。

只需同時在兩個方向上復制數據,直到讀取流的結尾即可。 然后:

  1. 關閉對面的插槽以進行寫入,然后停止該方向的復制。 這會將EOS傳播到對等端。
  2. 如果您從中讀取EOS的套接字已經被關閉以進行寫入(必須記住),請關閉兩個套接字。

暫無
暫無

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

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