HTTP 笔记 网关 隧道 中继

网关

网关可以作为某种翻译器使用,它抽象出了一种能够到达资源的方法。网关是资源和应用程序之间的粘合剂。应用程序可以请求网关来处理某条请求,网关可以提供一条响应。

有些网关会自动将Http流量转换为其他协议,这样http客户端无需了解其他协议,就可以与其他应用程序时行交互了。

web网关在一侧使用http协议,在另一侧使用另一种协议

可以用一个斜杠分隔客户端和服务器端协议,并以此对网关进行描述:客户端协议/服务器端协议

协议网关

将http流量导向网关时所使用的方式与将流量导向代理的方式相同。最常见的方式是,显式地配置浏览器使用网关,对流量进行透明的拦截,或者将网关配置为替代者 反向代理。

1 HTTP/* :服务器端web网关

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

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

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

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

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

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

资源网关

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

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

每条CGI请求引发一个新进程开销高。

新型CGI 快速CGI,模拟CGI,但它是作为持久守护进程运行的,消除了为每个请求建立或拆除新进程所带来的性能损耗。

服务器扩展API

web服务是应用程序共享信息的一种新机制。

SOAP简单对象访问协议,是向http报文中添加XML信息的标准方式。

隧道

web隧道允许用户通过http连接发送非Http流量,使用web隧道最常见的原因就是要在http连接中嵌入非http流量,这样,这类流量就可以穿过只允许web流量通过的防火墙了。

1 用connect建立Http隧道

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

客户端发送一条connect请求给隧道网关。客户端的connect方法请求隧道网关打开 一条TCP连接

创建TCP连接

一旦建立了TCP连接,网关就会发送一条HTTP 200 connection established响应来通知客户端

些时,隧道就建立起来了。客户端通过http隧道发送的所有数据都会被直接转发给输出TCP连接,服务器发送的所有数据都会通过http隧道转发给客户端。

connect请求:

起始行:

CONNECT home.netscape.com:443 HTTP/1.0

User-agent:Mozilla/4.0

起始行之后,有零个或多个http请求首部字段。这些行照例以CRLF结尾,首部列表以一个空的CRLF结束。

connect响应

响应码 200表示成功 。

HTTP/1.0 200 Connection Established

Proxy-agent:Netscape-Proxy/1.1

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

 一旦隧道建立起来了,数据就可以在任意时间流向任意方向了。

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

SSL隧道

加密SSL,其信息是加密的,无法通过传统的代理服务器转发。隧道会通过一条HTTP连接来传输SSL流量,以穿过端口80的HTTP防火墙。

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

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

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

中继

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

由于无法正确处理connection首部,所以有潜在的挂起keep-alive连接的可能。

对任何大规模部署来说,都要非常认真地考虑使用真正的、完全遵循http的代理服务器

原文地址:https://www.cnblogs.com/caojuansh/p/13067322.html