HTTP之网关的分类

网关的分类

========================摘自《HTTP权威指南》=============================

1、  HTTP/*:服务器端Web网关

请求流入原始服务器时,服务器端Web网关会将客户度的HTTP请求转换成其他协议(见图8-5)

 

在图8-5中,网关收到了一条对FTP资源的HTTP请求:

ftp://ftp.irs.gov/pub/00-index.txt

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

(1)、发送USER和PASS命令登录到服务器上去;

(2)、发布CWD命令,转移到服务器上合适的目录中去;

(3)、将下载类型设置为ASCII;

(4)、用MDTM获取文档的最后修改时间;

(5)、用PASV告诉服务器将有被动数据获取请求到达;

(6)、用RETR请求进行对象获取;

(7)、打开到FTP服务器的数据连接,服务器端口由控制信道返回;一旦数据通信打开了就将对象内容回送给网关

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

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

 

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

将HTTPS/HTTP网关作为安全加速器使用的情况是越来越多了。这些HTTPS/HTTP网关位于Web服务器之前,通常作为不可见的拦截网关或反向代理使用。它们接收安全的HTTPS流量,对安全流量进行解密,并向Web服务器发送普通的http请求(见图8-7)

 

这些网关中通常包含专用的解密硬件,以比原始服务器有效得多的方式来解密安全流量,以减轻原始服务器的负荷。这些网关在网关和原始服务器之间发送的是未加密的流量,所以,要谨慎使用,确保网关和原始服务器之间的网络是安全的。

4、资源网关

前面我们一直说的是通过网络连接客户端和服务器的网关。但最常见的网关,应用程序服务器会将目标服务器与网关结合在一个服务器中实现。应用程序服务器是服务器端网关,与客户端通过HTTP进行通信,并与服务器端的应用程序相连(参见图8-8)

 

在图8-8中,两个客户端是通过HTTP连接到应用程序服务器的。但应用程序服务器并没有回送文件,而是将请求通过一个网关应用编程接口(Application Programming Interface)发送给运行在服务器上的应用程序。

(1)、收到客户端A的请求,根据URL将其通过API发送给一个数码摄像机应用程序。将得到的图片绑定到一条HTTP响应报文中,再回送给客户端,在客户端的浏览器中显示。

(2)、客户端B的URL请求的是一个电子商务应用程序。客户端B的请求是通过服务器网关API发送给电子商务软件的,结果会被回送给浏览器。电子商务软件与客户端进行交互,应道用户通过一系列HTML页面来完成购物的。

第一个流行的应用程序网关API就是通用网关接口(Common Gateway Interface,CGI)。CGI是一个标准接口集,Web服务器可以用它来装载程序以响应对特定URL的HTTP请求,并收集程序的输出数据,将其放在HTTP响应中回送。商业的web服务器提供了一些更复杂的接口,以便将Web服务器连接到应用程序上。

请求需要使用网关的资源时,服务器会请辅助应用程序来处理请求。服务器会将辅助应用程序所需的数据传送给它。通常就是整条请求,或者用户想在数据库上运行的请求(来自URL的请求字符串)之类的东西。

然后它会向服务器返回一条响应或响应数据,服务器会将其转发给客户端。服务器和网关是相互独立的应用程序,因此,它们的责任是分得很清楚的。图8-9显示了服务器与网关应用程序之间交互的基本运行机制。

 

(1)、CGI

CGI是第一个得到最广泛应用的服务器扩展。在Web上广泛用于动态HTML、信用卡处理以及数据库查询等任务。

CGI应用程序是独立于服务器的,所以,几乎可以用任意语言来实现。CGI很简单,几乎所有的HTTP服务器都支持它。

CGI的处理对用户来说是不可见的。从客户端的角度来看,就像发起一个普通请求一样。它完全不清楚服务器和CGI应用程序之间的转接过程。URL中出现字符CGI和可能出现的“?”是客户端发现使用了CGI应用程序的唯一线索。

(2)、服务器扩展API

CGI协议外部翻译器与现有的HTTP服务器提供了一种简洁的接口方式,但如果想要改变服务器自身的行为,或者只是想提升从服务器上获得的性能呢?服务器开发者为这两种需求提供了几种服务器扩展API,为Web开发者提供了强大的接口,以便他们将自己的模块与HTTP服务器直接连接。扩展API允许程序员将自己的代码嫁接到服务器上,或者用自己的代码将服务器的一个组件完整的替换出来。

 

posted @ 2019-03-05 20:09  小菜鸡1枚  阅读(1770)  评论(0编辑  收藏  举报