HTTP第八、九章之网关、隧道、web机器人

网关

网关(gateway): 资源和应用程序之间的粘合剂。应用程序可以(通过HTTP或其它已定义的接口)请求网关来处理某条请求,网关可以提供一条响应。网关可以向数据库发送查询语句,或者生成动态的内容,像一扇门一样,进去一个请求,出来一个响应。

 

网关和代理的区别:

代理连接的是两个或多个使用相同协议的应用程序,而网关连接的则是两个或多个使用不同协议的端点。网关扮演的是“协议转换器”的角色。
在这里插入图片描述

客户端和服务器端网关:

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

 

二、协议网关

服务器端Web网关(服务器协议转换器)、服务器端安全网关、客户端安全网关以及应用程序服务器。

2.1(HTTP/*)服务器端Web网关
客户端发送HTTP请求,服务器Web网关会将该请求转换为其他协议与服务器进行连接。完成获取资源以后,会将对象放在一条HTTP响应中会送给客户端。

在这里插入图片描述

2.2(HTTP/HTTPS)服务器端安全网关:
客户端发送HTTP请求,网关会自动加密来自客户端的请求,然后再发送给服务器。

在这里插入图片描述

2.3(HTTPS/HTTP)客户端安全加速器网关
客户端发送的请求是经过加密的安全的HTTPS流量,通过网关进行解密,再向Web服务器发送普通的HTTP请求。
这些网关中通常都包含专用的解密硬件,解密效率高于原始服务器,可以减轻原始服务器的负荷。

在这里插入图片描述

2.4 资源网关
应用程序服务器,将目标服务器与网关结合在一个服务器中。应用程序服务器是服务器端网关,与客户端通过HTTP进行通信,并与服务器端的应用程序相连接。
客户端通过HTTP连接到应用程序服务器,服务器并不回送文件,而是将请求通过网关API发送给应用程序(运行在服务器上)。应用程序将请求资源回送给客户端。

在这里插入图片描述

 

CGI(Common Gateway Interface )——通用网关接口

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

 CGI应用程序是独立于服务器的

URL中出现字符cgi和可能出现的“?”是客户端发现使用了CGI应用程序的唯一线索。

 

三、隧道 

Web隧道 允许用户通过HTTP连接发送非HTTP流量,这样就可以在HTTP附带其它协议数据,也就是说,可以在HTTP连接中嵌入非HTTP流量,非HTTP流量就可以穿过只允许Web流量通过的防火墙了。

 

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

3.1 数据隧道和连接管理

隧道一旦建立起了,数据就可以在任意时间流向任意方向。隧道的两端必须做好任意时间接收数据的准备,并且需要将数据立即转发出去。

因为隧道仅仅是进行数据的转发,对于数据之间的关系和顺序不能做任何假设和干预,而且有可能转发的数据之间存在有依赖关系,所以隧道不能忽略任何数据,而且要按照原顺序做及时转发,否则可能出现数据问题。如果数据的消费端出现数据消耗不足,就可能造成生成者这端的挂起。

3.2 SSL隧道
SSL协议,其信息是加密的,虽然我们一般可以通过443端口直接进行SSL连接,但是无法通过传统的有HTTP防火墙的代理服务器转发。这个时候可以利用隧道通过一条 HTTP 连接来传输 SSL 流量,以穿过端口 80 的 HTTP 防火墙。
通过HTTP隧道建立SSL连接的过程如下:


SSL隧道

四 中继

HTTP 中继(relay)是没有完全遵循 HTTP 规范的简单 HTTP 代理中继负责处理 HTTP 中建立连接的部分,然后对字节进行盲转发
所以中继的优点是实现简单,当我们只是提供一个简单的过滤、诊断或内容转换功能的代理的时候,可以考虑使用中继。但是由于其盲转发的特性,所以会引起很多互操作性的问题(如Connection首部等)。

注:简单的中继通常不会期待同一条连接上还会有另一条请求到达。

五 Web机器人

Web机器人 是能够在无需人类干预的情况下自动进行一系列 Web事物处理的软件程序。很多机器人会从一个Web站点逛到另一个Web站点,获取内容,跟踪超链接,并对它们找到的数据进行处理。如果一个Web站点有 robots.txt文件,那么在访问这个Web站点上的任意URL之前,机器人都必须去获取它并对其进行处理。由主机名和端口号定义的整个Web站点仅有一个 robots.txt资源。如果站点是虚拟主机,每个虚拟的docroot都可以有一个 robots.txt文件

获取robots.txt

机器人会用HTTP的GET方法来获取robots.txt资源,就像获取Web服务器上所有其他资源一样,机器人应该在 From首部 和 User-Agent首部 中传输标识信息,以帮助站点管理员对机器人的访问进行跟踪。

# 例子:
GET / robots.txt HTTP / 1.0
HOST:www.example.com
User-Agent:Slurp / 2.0
Date:Web Oct 3 23:30:EST

 

响应码和状态码:

机器人会根据对robots.txt检索结果采取不同方案。

  • 2xx:机器人对内容进行解析,并使用排斥规则从那个站点上获取内容;
  • 404:机器人认为服务器没有任何排斥规则,对次站点的访问不受robots.txt限制;
  • 401 / 403:机器人认为对此站点访问完全受限;
  • 503:机器人会推迟对此站点的访问,知道可以获取资源为止;
  • 3xx:如果服务器相应说明是重定向,机器人就应该跟着重定向,直到找到资源为止;

robots.txt文件格式:

文件中有三种类型行:空行、注释行和规则行。

  • User - Agent:Slurp 允许机器人Slurp访问;
  • User - Agent:Webcrawler 允许机器人Webcrawler访问;
  • DisAllow: / private 访问除了private子目录;
  • DisAllow: 阻止其它机器人访问该站点任何内容
#
# 例子:robots.txt for Discuz! X3
#
User-agent: *
Disallow: /api/
Disallow: /data/
Disallow: /source/
Disallow: /install/
Disallow: /template/
Disallow: /config/
Disallow: /uc_client/
Disallow: /uc_server/
Disallow: /static/
Disallow: /admin.php
Disallow: /search.php
Disallow: /member.php
Disallow: /api.php
Disallow: /misc.php
Disallow: /connect.php
Disallow: /forum.php?mod=redirect*
Disallow: /forum.php?mod=post*
Disallow: /home.php?mod=spacecp*
Disallow: /userapp.php?mod=app&*
Disallow: /*?mod=misc*
Disallow: /*?mod=attachment*
Disallow: /*mobile=yes*

 

机器人的META标签:

NOINDEX:告诉机器人不要对页面的内容进行处理;

<META NAME = "ROBOTS" CONTENT = "NOINDEX">

NOFOLLOW:告诉机器人不要爬行这个页面的任务外链;

<META NAME = "ROBOTS" COMEN = "NOFOLLOW">

 

posted @ 2019-07-31 21:59  幻落之瞳  阅读(511)  评论(0编辑  收藏  举报