HTTP隧道
HTTP隧道用于在被限制的网络连接(包括防火墙、NAT和ACL)以及其他限制的情况下在两台计算机之间建立网络链接。该隧道通常由位于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请求和响应中,因此该方法适用于大多数代理、防火墙及内网。
另见
- ICMP tunnel
- Pseudo-wire
- Tunnel broker
- Virtual private network (VPN)
- Virtual extensible LAN
- Network virtualization using generic routing encapsulation
参考文献
- ^ Hypertext Transfer Protocol -- HTTP/1.1 [2010-07-09]. RFC 2616.
- ^ Upgrading to TLS Within HTTP/1.1 (RFC 2817). [3 July 2011]. (原始内容存档于2015-10-08).
- ^ Fielding, Roy. Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content. tools.ietf.org. [2014-06-01]. (原始内容存档于2014-07-14) (英语).
- ^ 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.