第二部分 HTTP结构——第8章 集成点:网关、隧道及中继

本章主要内容:

  • 在HTTP和其他协议及应用程序之间起到接口作用的网关;
  • 允许不同类型的Web应用程序互相通信的应用程序接口;
  • 允许用户在HTTP连接上发送非HTTP流量的隧道;
  • 作为一种简化的HTTP代理,一次将数据转发一跳的中继。

1 网关(gateway)

网关可以作为某种翻译器使用,它抽象出了一种能够到达资源的方法。网关是资源和应用程序之间的粘合剂。应用程序可以请求网关来处理某条请求,网关可以提供一条响应。网关可以向数据库发送查询语句,或者生成动态的内容,就像一个门一样:进去一条请求,出来一个响应。

网关示例:
在这里插入图片描述

  • 图a中,网关收到了对FTP URL的HTTP请求。然后网关打开了FTP连接,并向FTP服务器发布适当的命令。然后将文档和正确的HTTP首部通过HTTP回送。
  • 图b中,网关通过SSL(Secure Socket Layer 安全套接字)收到了一条加密的Web请求,网关会对请求进行解密,然后向目标服务器转发一条普通的HTTP请求。可以将这些安全加速器直接放在Web服务器前面,以便为原始服务器提供高性能的加密机制。
  • 图c中,网关通过应用程序服务器网关API,将HTTP客户端连接到服务器端的应用程序上去。在网上的电子商店购物、查看天气预报,或者获取股票推荐时,访问的就是应用程序的服务器网关。
1.1 客户端和服务器端网关

Web网关在一侧使用HTTP协议,在另一侧使用另一种协议。

对网关的描述:
<客户端协议>/<服务端协议>

服务器端网关客户端网关来说明对话是在网关的哪一侧进行的。
**服务器端网关(server-side gateway):**通过HTTP与客户端对话,通过其他协议与服务器通信(HTTP/)。
**客户端网关(client-side gateway):**通过其他协议与客户端对话,通过HTTP与服务器通信(
/HTTP)。

2 协议网关

2.1 HTTP/*:服务器端Web网关

请求流入原始服务器时,服务器端Web网关会将客户端HTTP请求转换为其他协议。

在这里插入图片描述

在上图中,网关收到了一条对FTP(File Transfer Protocol)资源的HTTP请求:
ftp://ftp.irs.gov/pub/00-index.txt

网关会打开一条到原始服务器FTP端口(端口21)的FTP连接,通过FTP协议获取对象。网关会做下列事情:

  • 发送USER和PASS命令登录到服务器上去;
  • 发布**CWD(更改工作目录)**命令,转移到服务器上合适的目录中去;
  • 将下载类型设置为ASCII;
  • 用**MDTM(返回指定文件的最后修改时间)**获取文档的最后修改时间;
  • 用**PASV(进入被动模式)**告诉服务器将有被动数据获取请求到达;
  • 用**RETR(传输文件副本)**请求进行对象获取;
  • 打开到FTP服务器的数据连接,服务器端口由控制信道返回;一旦数据信道打开了,就将对象内容回送给网关。

完成获取之后,会将对象放在一条HTTP响应中回送给客户端。

2.2 HTTP/HTTPS:服务器端安全网关

一个组织可以通过网关对所有输入Web请求加密,以提供额外的隐私和安全性保护。客户端可以用普通的HTTP浏览Web内容,但网关会自动加密用户的对话。

2.3 HTTPS/HTTP客户端安全加速器网关

HTTPS/HTTP网关位于Web服务器之前,通常作为不可见的拦截网关或反向代理使用。它们接收安全的HTTPS流量,对安全流量进行解密,并向Web服务器发送普通的HTTP请求。

这些网关中通常包含专用的解密硬件,速度快,减轻原始服务器的负荷。这些网关和原始服务器之间发送的是未加密的流量,确保网关和原始服务器之间的网络是安全的。

3 资源网关

应用程序服务器,会将目标服务器与网关结合在一个服务器中实现。应用程序服务器是服务器端网关,与客户端通过HTTP进行通信,并与服务器端的应用程序相连。

3.1 CGI

Common Gateway Interface 通用网关接口
在这里插入图片描述

4 应用程序接口和Web服务

HTTP可以作为一种连接应用程序的基础软件来使用。在将应用程序连接起来的过程中,一个更为棘手的问题是在两个应用程序之间进行接口的协商,以便这些应用程序可以进行数据的交换——这通常都是针对具体应用程序的个案进行的。

Web服务是构建在标准的Web技术(比如HTTP)之上的。

Web服务可以用XML通过SOAP来交换信息。XML(Extensible Markup Language,扩展标记语言)提供了一种创建数据对象的定制信息,并对其进行解释的方法。SOAP(Simple Object Access Protocol,简单对象访问协议)是向HTTP报文中添加XML信息的标准方式。

5 隧道

Web隧道,通过HTTP应用程序访问使用非HTTP协议的应用程序

Web隧道允许用户通过HTTP连接发送非HTTP流量,这样就可以在HTTP上捎带其他协议数据了。使用Web隧道最常见的原因就是要在HTTP连接中嵌入非HTTP流量,这样,这类流量就可以穿过只允许Web流量通过的防火墙了。

5.1 用CONNECT建立HTTP隧道

Web隧道是用HTTP的CONNECT方法建立起来的。

CONNECT方法请求隧道网关创建一条到达任意目的的服务器和端口的TCP连接,并对客户端和服务器之间的后继数据进行盲转发。

在这里插入图片描述

CONNECT方法如何建立起一条到达网关的隧道。

  • 图a中,客户端发送了一条CONNECT请求给隧道网关。客户端的CONNECT方法请求给隧道网关。客户端的CONNECT方法请求隧道网关打开一条TCP连接。
  • 在图b和图c中创建了TCP连接。
  • 一旦建立了TCP连接,网关就会发送一条HTTP200 Connection Established响应来通知客户端。
  • 此时,隧道就建立起来了。客户端通过HTTP隧道发送的所有数据都会被直接转发给输出TCP连接,服务器发送的所有数据都会通过HTTP隧道转发给客户端。

图上的例子描述了一条SSL隧道,其中的SSL流量是在一条HTTP连接上发送的,但是通过CONNECT方法可以与任意协议的任意服务器建立TCP连接的。

5.1.1 CONNECT请求

除了起始行之外,CONNECT的语法与其他HTTP方法类似。一个后面跟着冒号和端口号的主机名取代了请求URI。主机和端口都必须指定:

CONNECT home.netscape.com:443 HTTP/1.0
User-agent:Mozilla/4.0

和其他HTTP报文一样,起始行之后,有零个或多个HTTP请求首部字段。这些行照例以CRLF结尾,首部列表以一个仅有CRLF的空行结束。

5.1.2 CONNECT响应

发送了请求之后,客户端会等待来自网关的响应。和普通HTTP报文一样,响应码200表示成功。按照惯例,响应中的原因短语通常被设置为“Connection Establish”:

HTTP/1.0 200 Connection Established
Proxy-agent:Netscape-Proxy/1.1

与普通HTTP响应不同,这个响应并不包含Content-Type首部。此时连接只是对原始字节进行转接,不再是报文的承载者,所以不需要使用内容类型了。

5.2 数据隧道、定时及连接管理

管道化数据对网关是不透明的,所以网关不能对分组的顺序和分组流作出任何假设。一旦隧道建立起来了,数据就可以流向任意方向了

作为一种性能优化方法,允许客户端在发送了CONNECT请求之后,接收响应之前,发送隧道数据。这样可以更快地将数据发送给服务器,但这就意味着网关必须能够处理跟在请求之后的数据。尤其是,网关不能假设网络I/O请求只会首部数据,网关必须确保在连接准备就绪时,将与首部一同读进来的数据发送给服务器。在请求之后以管道方式发送数据的客户端,如果发现回送的响应是认证请求,或者其他非200但不致命的错误状态,就必须做好重发请求数据的准备。

如果在任意时刻,隧道的任意一个端点断开了连接,那个端点发出的所有未传输数据都会被传送给另一个端点,之后,到另一个端点的连接也会被代理终止。如果还有数据要传输给关闭连接的端点,数据会被丢弃。

5.3 SSL隧道

很多组织都会将所有流量通过分组过滤路由器和代理服务器以隧道方式传输,以提升安全性。
在这里插入图片描述

为了让SSL流量经现存的代理防火强进行传输,HTTP中添加了一项隧道特性,在此特性中,可以将原始的加密数据放在HTTP报文中,通过普通的HTTP信道传送。

在图8-12a中,SSL流量被直接发送给了一个安全Web服务器,在图8-12b中,SSL流量被封装到一条HTTP报文中,并通过HTTP端口80上的连接发送,最后被解封装为普通的SSL连接。

通常会用隧道将非HTTP流量传过端口过滤防火墙。这一点可以得到很好的利用,比如,通过防火墙传输安全SSL流量。但是,这项特性可能会被滥用,使得恶意协议通过HTTP隧道流入某个组织内部。

5.4 SSL隧道与HTTP/HTTPS网关的对比

可以像其他协议一样,对HTTPS协议(SSL的HTTP)进行网关操作:由网关(而不是客户端)初始化与远端HTTPS服务器的SSL会话,然后代表客户端执行HTTPS事务。响应会由代理接收并解密,然后通过(不安全)HTTP传送给客户端。这就是网关处理HTTPS的方式。

缺点:

  • 客户端到网关之间的连接是普通的非安全HTTP;
  • 尽管代理是已认证主体,但客户端无法对远端服务器执行SSL客户端认证。
  • 网关要支持完整的SSL实现。

注意,对于SSL隧道机制来说,无需在代理中实现SSL。SSL会话是建立在产生请求的客户端和目的(安全的)Web服务器之间的,中间的代理服务器只是将加密数据经过隧道传输,并不会在安全事务中扮演其他的角色。

5.5 隧道认证

在适当的情况下,也可以将HTTP的其他特性与隧道配合使用。尤其是,可以将代理的认证支持与隧道配合使用,对客户端使用隧道的权力进行认证。

5.6 隧道的安全性考虑

为了降低对隧道的滥用,网关应该只为特定的知名端口,比如HTTPS的端口443,打开隧道。

在这里插入图片描述

6 中继

HTTP中继(relay)是没有完全遵循HTTP规范的简单HTTP代理。中继负责处理HTTP中建立连接的部分,然后对字节进行盲转发

盲中继哑代理
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值