HTTP隧道

维基百科,自由的百科全书

HTTP隧道用于在被限制的网络连接(包括防火墙NATACL)以及其他限制的情况下在两台计算机之间建立网络链接。该隧道通常由位于DMZ中的代理服务器中介创建。

隧道还可以使用受限网络通常不支持的协议进行通信。

HTTP CONNECT方式

HTTP隧道的常见形式是标准HTTP CONNECT方式。[1][2][3]在这种机制下,客户端要求HTTP代理服务器将TCP连接转发到所需的目的地。然后服务器继续代表客户端进行连接。服务器建立连接后,代理服务器将继续代理与客户端之间的TCP流。只有初始连接请求是HTTP,之后服务器将仅代理建立的TCP连接。

正是这种机制让使用HTTP代理的客户端可以访问TLS网站(即HTTPS)。

建立隧道示例

客户端连接到代理服务器,并通过指定端口和要连接的主机建立隧道。 该端口用于指示请求的协议。[4]

CONNECT streamline.t-mobile.com:22 HTTP/1.1
Proxy-Authorization: Basic encoded-credentials

如果代理允许连接,并且代理已连接到指定的主机,则代理将返回2XX成功响应。[4]

HTTP/1.1 200 OK

现在客户端将通过代理访问远程主机。 发送到代理服务器的所有数据都将原样转发到远程主机[4],并且客户端可以使用远程主机支持的任何协议进行通信。

在下面的示例中,客户端在初始CONNECT请求中通过端口号开始SSH通信。

SSH-2.0-OpenSSH_4.3\r\n
... ggg

不使用CONNECT的HTTP隧道

HTTP隧道也可以仅使用常用的HTTP请求方法(如POST,GET,PUT和DELETE)来实现。这类似于同步HTTP上的双向流(BOSH)中使用的方法。

示例程序,特殊的HTTP服务器在受保护的网络外部运行,而客户端程序在受保护的网络内部的计算机上运行。

当客户端发送任何网络流量时,客户端都会将流量数据重新打包为HTTP请求,并将数据发送到外部服务器,该外部服务器会提取并执行客户端的原始网络请求。

外部服务器收到此请求的响应后,将其重新打包为HTTP响应,并发送回客户端。

由于所有流量都封装在常规的GET和POST请求和响应中,因此该方法适用于大多数代理、防火墙及内网。

另见

参考文献

  1. ^ Hypertext Transfer Protocol -- HTTP/1.1 [2010-07-09]. RFC 2616. 
  2. ^ Upgrading to TLS Within HTTP/1.1 (RFC 2817). [3 July 2011]. (原始内容存档于2015-10-08). 
  3. ^ Fielding, Roy. Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content. tools.ietf.org. [2014-06-01]. (原始内容存档于2014-07-14) (英语). 
  4. ^ 4.0 4.1 4.2 CONNECT. HTTP/1.1 Semantics and Content. IETF. June 2014: p. 30. sec. 4.3.6 [4 November 2017]. RFC 7231.