26
2017
09

HTTP个人总结(六)

今天主要总结关于网关、隧道及中继的内容。

首先介绍一下网关是什么?

网关可以作为某种翻译器使用,它抽象出了一种能够到达资源的方法。网关是应用程序和资源的粘合剂。
这里写图片描述

Web网关在一侧使用HTTP协议,在另一侧使用另一种协议。
<客户端协议>/<服务器端协议>
比如:
服务器端网关通过HTTP与客户端对话,通过其他协议与服务器通信(HTTP/*)
客户端网关通过与其他协议与客户端对话,通过HTTP与服务器通信(*/HTTP)

下面详细介绍:
HTTP/*:服务端Web网关:
请求流入原始服务器时,服务器端与Web网关会将客户端HTTP请求转换为其他协议。
这里写图片描述
网关会打开一条到原始服务器FTP端口的FTP连接,通过FTP协议获取对象。网关会做下列事情:
1.发送USER和PASS命令登录到服务器上去
2.发布CWD命令,转移到服务器上合适的目录中去
3.将下载类型设置为ASCII
4.用MDTM获取文档的最后修改时间
5.PASV告诉服务器将有被动数据获取请求到达
6.用RETR请求进行对象获取
7.打开到FTP服务器的数据连接,服务器端口由控制信道返回,一旦数据信道打开了,就将对象内容回送给网关

HTTP/HTTPS:服务器端安全网关:
一个组织可以通过网关对所有的输入Web请求加密,以提高额外的隐私和安全性保护。客户端可以用普通的HTTP浏览Web内容,但网关会自动加密用户的对话。
HTTPS/HTTP客户端安全加速器网关:
这些HTTPS/HTTP网关位于Web服务器之前,通常作为不可见的拦截网关或反向代理使用,它们接收安全的HTTPS流量,对安全流量进行解密,并向Web服务器发送普通的HTTP请求。这些网关中通常都包含专用的解密硬件,以比原始服务器有效的多的方式解密安全流量,以减轻原始服务器的负荷。这些网关在网关和原始服务器之间发送的是未加密的流量,所以确保网关和原始服务器之间的网络是安全的。
这里写图片描述

下面讲资源网关?

最常见的网关,应用程序服务器,会将目标服务器与网关结合在一个服务器中实现。应用程序服务器是服务器端网关,与客户端通过HTTP进行通信,并与服务器端的应用程序相连。
这里写图片描述
1.收到客户端A的请求,根据URI将其通过API发送给一个数码摄像机应用程序。将得到的图片绑定到一条HTTP响应报文中,再回送给客户端。在客户端的浏览器中显示。
2.客户端B的URI请求的是一个电子商务应用程序。客户端B的请求是通过服务器网关API发送给电子商务软件的,结果会被回送给浏览器。电子商务软件与客户端进行交互,引导用户通过一系列HTML页面来完成购物。

第一个流行的应用程序网关API就是通过网关接口(CGI)。CGI是一个标准接口集,Web服务器可以用它来装载程序以响应对特定URL的HTTP请求,并收集程序的输出数据,将其放在HTTP响应中回送。

下面将Web服务?

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

隧道?

Web隧道可以通过HTTP应用程序访问使用非HTTP协议的应用程序。Web隧道允许用户通过HTTP连接发送非HTTP流量,这样就可以再HTTP上捎带其他协议数据。

如何用CONNECT建立HTTP隧道?

CONNECT方法请求隧道网关创建一条到达任意目的服务器和端口的TCP连接,并对客户端和服务器之间的后继数据进行盲转发。
这里写图片描述
1.CONNECT请求
除了起始行之外,CONNECT的语法跟其他HTTP方法类似。一个后面跟着冒号和端口号的主机名取代了请求URI。主机和端口都必须指定。
2.CONNECT响应
和普通HTTP报文一样,响应码200表示成功。响应中的原因短语通常被设置为“Connection Estabilished”。与普通HTTP响应不同,这个响应不需要包含Content-Type首部,此时连接只是对原始字节进行转接,不再是报文的承载者,所以不需要使用内容类型了。

接下来讲数据隧道,定时及连接管理?

管道化数据对网关是不透明的,所以网关不能对分组的顺序和分组流作任何假设。一旦隧道建立起来了,数据就可以在任意时间流向任意方向了。
作为一种性能优化方法,允许客户端在发送了CONNECT请求之后,接收响应之前,发送隧道数据。尤其是,网关不能假设网络I/O请求只会返回首部数据,网关必须确保在连接准备就绪时,将与首部一同读进来的数据发送给服务器。在请求之后以管道方式发送数据的客户端,如果发现回送的响应是认证请求,或者其他非200但不致命的错误状态,就必须做好重发请求数据的准备。
如果在任意时刻,隧道的任意一个端点断开了连接,那个端点发出的所有未传输数据都会被传送给另一个端点,之后,到另一个端点的连接也会被代理终止。如果还有数据要传输给关闭连接的端点,数据会被丢弃。

SSL隧道?

最初开发Web隧道是为了通过防火墙来传输加密的SSL流量。很多组织都会将所有流量通过分组过滤路由器和代理服务器以隧道方式传输,以提升安全性。但有些协议,比如加密SSL,其信息是加密的,无法通过传统的代理服务器转发。隧道会通过一条HTTP连接来传输SSL流量,以穿过端口80的HTTP防火墙。
这里写图片描述

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

可以像其他协议一样,对HTTPS协议(SSL上的HTTP)进行网关操作:由网关(而不是客户端)初始化与远端HTTPS服务器的SSL会话,然后代表客户端执行HTTPS事务。响应会由代理接收并解密,然后通过(不安全的)HTTP传送给客户端,这是网关处理FTP的方式,但这种方式有几种缺点:
1.客户端到网关之间的连接时普通的非安全的HTTP
2.尽管代理是已认证主体,但客户端无法对远端服务器执行SSL客户端认证(基于X509证书的认证)
这里写图片描述
注意,对于SSL隧道机制来说,无需在代理中实现SSL。SSL会话是建立在产生请求的客户端和目的(安全的)Web服务器之间的,中间的代理服务器只是将加密数据和经过隧道传输,并不会在安全事务中扮演其他的角色。

隧道认证:
这里写图片描述
隧道的安全性考虑:隧道网关无法验证目前使用的协议是否就是它原本打算经过隧道传输的协议。因此,恶意用户会通过隧道做些事。

中继?

HTTP中继是没有完全遵循HTTP规范的简单HTTP代理。中继负责处理HTTP中建立连接的部分,然后对字节进行盲转发。
之前介绍过的盲中继就是实现中存在的一个常见问题。

上一篇:Android之控件阴影模糊效果死磕Paint.setShadowLayer() 下一篇:Android学习笔记(二十四):导入包后导致的包冲突问题