网关,隧道及中继

网关

网关可以作为某种翻译器使用,它抽象出了一种能够到达资源的方法。网关是资源和应用程序之间的粘合剂。应用程序可以(通过HTTP或其他已定义的接口)请求网关来处理某条请求,网关可以提供一条响应。网关可以向数据库发送查询语句,或者动态的生成内容。有些网关可以自动将HTTP流量转换为其他协议,这样HTTP客户端无需了解其他协议,就可以与其他应用程序进行交互了。

客户端服务器网关
  • 服务器网关:通过HTTP与客户端会话,通过其他协议与服务端通信。
  • 客户端网关:通过其他协议与客户端对话,通过HTTP与服务器通信。
协议网关
HTTP/*: 服务器端Web网关

请求流入原始服务器时,服务器端Web网关会将客户端HTTP请求转换为其他协议,完成获取之后,会将对象放在一条HTTP响应中回送给客户端。

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

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

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

将HTTPS/HTTP 网关作为安全加速器使用的情况越来越多了,这些 HTTPS/HTTP 网关位于Web服务器之前,通常作为不可见的拦截网关或反向代理使用。它们接收安全的 HTTPS 流量,对安全流量进行解密,并向 Web服务器发送普通的HTTP请求。这些网关中通常都包含专用的解密硬件,以比原始服务器有效的多的方式来解密安全流量,以减轻原始服务器的负荷。这些网关在网关和原始服务器之间发送的是未加密的流量。所以,要谨慎使用,确保网关和原始服务器之间的网络是安全的。

隧道
用 CONNECT 建立 HTTP 隧道

Web 隧道是用 HTTP 的 CONNECTION 方法建立起来的。CONNECTION 方法并不是 HTTP/1.1 核心规范的一部分,但却是一种得到广泛应用的扩展。CONNECTION 方法请求隧道网关创建一条到达任意目的服务器和端口的TCP连接,并对客户端和服务器之间的后继数据进行盲转发。

  1. 客户端发送了一条 CONNECT 请求给隧道网关。客户端的 CONNECT 方法请求隧道网关打开一条 TCP 连接
    2.图b和c创建 TCP 连接
    3.一旦建立了 TCP 连接,网关就会发送一条 HTTP 200 Connection Established响应来通知客户端。
    4.此时,隧道就建立起来了,客户端通过 HTTP 隧道发送的所有数据都会被直接转发输出 TCP 连接,服务器发送的所有数据都会通过 HTTP 隧道转发给客户端。


    Web 隧道.png

    上图描述了一条 SSL 隧道,其中的 SSL 流量是在一条 HTTP 连接上发送的,但是通过 CONNECTION 方法可以与使用任意协议的任意服务器建立 TCP 连接的。

CONNECT 请求

除了起始行之外,CONNECTION 的语法与其他 HTTP方法类似。一个后面跟着冒号和端口号的主机名取代了请求URI。主机和端口号都必须指定:

CONNECT home.netscape.com:443 HTTP/1.0
User-agent: Mozilla/4.0
CONNECTION 响应

发送了请求之后,客户端会等待来自网页的响应。和普通的HTTP请求报文一样,响应码200表示成功。按照惯例,响应中的原因短语通常被设置为"Connection Established":

HTTP/1.0 200 Connection Established
Proxy-agent: Netscape-Proxy/1.1

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

你可能感兴趣的:(网关,隧道及中继)