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连接的过程如下:

四 中继
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 ::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">
HTTP第八、九章之网关、隧道、web机器人的更多相关文章
- 第十九章 排查和调试Web程序 之 防止和排查运行时问题
1. 概述 常见的几种运行时问题包括 错误数据.慢于预期的响应.未知行为 或者 未处理的异常. Visual Studio 提供了 排查.跟踪 和 日志 等工具 来帮助排查系统的问题.有些情况还需要插 ...
- “全栈2019”Java第八十九章:接口中能定义内部类吗?
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- (lintcode全部题目解答之)九章算法之算法班题目全解(附容易犯的错误)
--------------------------------------------------------------- 本文使用方法:所有题目,只需要把标题输入lintcode就能找到.主要是 ...
- 学习GT一书前九章的体会
学习Gilbarg和Trudinger一书前九章的体会 本书第二章,调和函数的基本性质进行展示.特别的对比较定理有深刻的阐述以及Perron方法的基本说明,并对Wiener准则作了简要说明. 第三章的 ...
- “全栈2019”Java第七十九章:类中可以嵌套接口吗?
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- 【C++】《C++ Primer 》第十九章
第十九章 特殊工具与技术 一.控制内存分配 1. 重载new和delete new表达式的工作机理: string *sp = new string("a value"); //分 ...
- Python之路【第十九章】:Django进阶
Django路由规则 1.基于正则的URL 在templates目录下创建index.html.detail.html文件 <!DOCTYPE html> <html lang=&q ...
- 第十九章——使用资源调控器管理资源(1)——使用SQLServer Management Studio 配置资源调控器
原文:第十九章--使用资源调控器管理资源(1)--使用SQLServer Management Studio 配置资源调控器 本系列包含: 1. 使用SQLServer Management Stud ...
- 第十九章——使用资源调控器管理资源(2)——使用T-SQL配置资源调控器
原文:第十九章--使用资源调控器管理资源(2)--使用T-SQL配置资源调控器 前言: 在前一章已经演示了如何使用SSMS来配置资源调控器.但是作为DBA,总有需要写脚本的时候,因为它可以重用及扩展. ...
随机推荐
- 用Activator.CreateInstance代替new实现类的实例化
一直想得到这样一个函数,输入一个类的名称为参数,返回一个相应的类的实例. 这在工厂模式中是非常有用的 这样,可以使程序有更高的扩展性,例如,,下面的例子 如果现在有一个类,专门用来计算交通工具的速度, ...
- IOC之MEF学习
MEF原理上很简单,找出有共同接口的导入.导出.然后找到把导出的实例化,赋给导入.说到底MEF就是找到合适的类实例化,把它交给导入.Export 特性可修饰类.字段.属性或方法,而 Import 特性 ...
- 6.单表的CRUD操作
1.插入后用新id初始化被插入对象 <insert id="insertStudentCatchId"> insert into student (age,name,s ...
- go语言入门(7)面向对象编程
1,概述 对于面向对象编程的支持Go 语言设计得非常简洁而优雅.因为, Go语言并没有沿袭传统面向对象编程中的诸多概念,比如继承(不支持继承,尽管匿名字段的内存布局和行为类似继承,但它并不是继 ...
- 手写走通HTTP server 第二版本
HTTP server 2.0 1 接收客户请求 2 解析客户端请求 3 组合数据,形成HTTP response 4 将数据发送给客户端 升级 : 1 多线程接收客户端请求 2 基本的请求解析,根据 ...
- shell脚本——sed命令
sed 命令 作为行编辑器,对文件进行编辑(以行为单位进行编辑) sed编辑文件,却不改变原文件 sed工作原理: 指定一个文本文件,依次读取文本文件中的每行内容,读取到模式空间中,在模式空间中进行匹 ...
- 《OpenCV图像处理编程实例》
<OpenCV图像处理编程实例>例程复现 随书代码下载:http://www.broadview.com.cn/28573 总结+遇到的issue解决: 第一章 初识OpenCV 1.VS ...
- php连接docker运行的mysql,显示(HY000/2002): Connection refused的解决办法
php要连接docker中运行的mysql是不能用localhost, 127.0.0.1来连接的,因为每个docker运行容器的localhost 127.0.0.1都是自己容器本身,不是mysql ...
- [Abp vNext微服务实践] - 启动流程
前几篇分别介绍了abp vNext微服务框架和微服务CI/CD环境搭建,本篇开始介绍vNext微服务框架的开发环境搭建. 环境准备 官方介绍的系统架构图如下: 上图中身份服务和网关服务已经集成在系统中 ...
- java——OOM内存泄漏
资料: 一.什么是OOM OOM,全称“Out Of Memory”,翻译成中文就是“内存用完了”,当JVM因为没有足够的内存来为对象分配空间并且垃圾回收器也已经没有空间可回收时,就会抛出这个erro ...