HTTP隧道

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

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

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

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

建立隧道示例 
客户端连接到代理服务器，并通过指定端口和要连接的主机建立隧道。 该端口用于指示请求的协议。CONNECT streamline.t-mobile.com:22 HTTP/1.1
Proxy-Authorization: Basic encoded-credentials如果代理允许连接，并且代理已连接到指定的主机，则代理将返回2XX成功响应。HTTP/1.1 200 OK现在客户端将通过代理访问远程主机。 发送到代理服务器的所有数据都将原样转发到远程主机，并且客户端可以使用远程主机支持的任何协议进行通信。

在下面的示例中，客户端在初始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

参考文献 

電腦安全
网络协议
穿隧協議
HTTP