。8.1 网关
定义:网关类似与翻译器,它抽象出了一种能够到达资源的方法。
实用:网关可以自动将HTTP流量转换为其他协议,这样使用HTTP协议的一方就不需要了解其他协议,也可实现与其他程序或设备交互。
例:客户端与服务端网关
Web服务器一侧使用HTTP协议,在另一侧使用另一个协议。
可以用一个斜杠来分隔客户端与服务端协议的格式对其进行描述:<客户端协议>/<服务端协议>
8.2 协议网关
8.2.1 HTTP/*
请求流入原始服务器时,Web网关会将HTTP协议转换为其他协议,如 下图:
网关收到一条对FTP资源的HTTP请求:ftp:/ftp.irs.gov/pub/00-index.txt,网关会打开一条到原始服务器FTP接口的FTP连接,通过FTP协议获取对象
网关会做如下事情:
- 发送USER和PASS命令登录到服务器上去
- 发布CWD命令,转移到服务器上合适的目录上去
- 将下载类型设置为ASCII
- 用MDTM
- 获取文档的最后修改时间
- 用PASV告诉服务器将有被动数据获取请求到达
- 用RETR请求进行对象获取
- 打开到FTP服务器的连接,服务器端口由控制信道返回;一旦数据信道打开了,就将对象内容送给网关
8.3 资源网关
前面说的是服务器与客户端之前的网关作用。但最常见的网关是应用程序服务器:将目标服务器与网关结合在一个服务器实现。
应用程序服务器是服务器端网关,与客户端通过HTTP协议通讯,并与服务器上应用和该程序相连接。
- CGI(Common gateway Interface)
CGI是一个标准接口集,服务端可以用它来装载程序以响应特定的URL。
CGI应用程序是独立于服务器之外的,可以用任何语言来实现该功能。
缺点:会造成性能消耗,进程方面CGI接口集使用越多占用越多
- 服务器扩展API
扩展API允许程序员将自己的代码嫁接到服务器上,或者用自己的代码将服务器的某一个组件完全替代。
8.4 隧道
含义:HTTP应用程序访问使用非HTTP协议的应用程序的方法之一。
8.4.1 Connect方法建立通道
Web隧道是通过HTTP的Connect方法建立起来的。Connect方法请求隧道网关建立一条到达任意目的的服务器和端口的TCP连接,并对后继数据进行盲转发。
在建立成功时服务端会返回 HTTP 200 Connection Established。
Connnect请求与响应格式与其他Http方法类似。
请求:以Connect开头,后面是服务器IP及端口号,还有Http版本号。
响应:Http协议版本号 200 Connection Established。
8.4.2 SSL隧道
最初开发Web隧道是为了通过防火墙来传输加密的SSL流量,很多组织都会讲将所有流量经过分组过滤路由器及代理服务器以隧道方式传输,以提升安全性。
但有些协议,其信息是加密的,无法通过传统的代理服务器转发,隧道会通过一条Http连接的传输SSL流量以穿过穿过端口80的Http防火墙。
为了SSL流量经过现存的防火墙进行传输,HTTP中添加了一个隧道特性,在此特性中,可以将原始的加密数据放在HTTP报文中,通过普通的HTTP信息传送。
8.4.3 SSL隧道与Http/Https网关对比
盗图:
网关式缺点:
- 客户端到网关之间的连接是普通的非安全的HTTP
- 客户端无法对远端服务器执行SSL客户端认证
- 网关要支持完整的SSL实现。
8.5 中继
HTTP中继是没有完全遵循HTTP规范的简单HTTP代理。中继负责处理HTTP建立连接的部分,然后对字节进行盲转发。
盲中继很容易实现,所以有时候会提供简单的过滤、诊断或内容转换等操作,但这种方法潜在严重的互操作问题,部署要小心(注:无法处理Connection)。