HTTP协议探究(二):代理、网关和隧道

一 复习与目标

1 复习

  • 缓存目的:减轻服务器压力,不重复请求相同的内容
  • 缓存位置:浏览器或中间代理
  • 相关状态码:200或403
  • 相关首部:
    • etag和since-none-match、last-modified和if-modified-since
    • cache-control:
      • private public
      • max-age s-maxage
      • must-revalidate proxy-revalidate
  • 缓存的处理流程(中间代理和浏览器)

2 目标

  • 缓存:代理服务器或者浏览器本地磁盘内保存的资源副本。
  • 缓存服务器是代理服务器的一种。
  • 与HTTP协作的Web服务器的角色:代理 网关 隧道。

二 概述

1 代理

代理是一种有转发功能的应用程序,它扮演了位于服务器和客户端“中间人”的角色,接收由客户端发送的请求并转发给服务器,同时也接收服务器返回的响应并转发给客户端。(相同协议,如:HTTP,版本可以不同)

2 网关

网关是转发其他服务器通信数据的服务器,接收从客户端发送来的请求时,它就像自己拥有资源的源服务器一样对请求进行处理。有时客户端可能都不会察觉,自己的通信目标是一个网关。(不同协议,如:客户端 --HTTP---> 网关 --POP---> 邮箱服务器)

3 隧道

隧道是在相隔甚远的客户端和服务器两者之间进行中转,并保持双方通信连接的应用程序。(HTTP应用程序发送非HTTP的流量)

注:上面的描述还是很抽象,后面讲解完就清楚了。

三 代理

1 代理的作用

  • 过滤器:过滤掉某些IP的访问
  • 文档访问控制:限制某些文档的访问
  • 安全防火墙:阻止SQL注入、阻止OS注入等(Nginx + lua)
  • Web缓存:响应存入本地,不需要重复获取。
  • 反向代理:接收真实请求,转发给内部网络上的服务器。
  • 负载均衡:根据网络流量状况把请求导向给特定的服务器。
  • 转码器:修改内容的主体格式,如:传输gif时,转换成jpeg。
  • 匿名者:删除身份特征(如:cookie、Ip),从而提供高度私密性。

2 代理主要内容

(1)代理服务器部署

  • 正向代理(出口代理):客户端 -> 内网 -> 代理 -> 外网 -> 服务器,如:VPN
  • 反向代理(入口代理):客户端 -> 外网 -> 代理 -> 内网 -> 服务器,如:防火墙
  • 网络交换代理:客户端 -> 外网 -> 代理 -> 外网 -> 服务器,如:缓存服务器

(2)层次结构

  • 多级代理,如:客户端 -> 代理1 -> 代理2 -> 代理3 -> 服务器

(3)请求如何到达代理?

  • 客户端配置(如:科学上网)
  • 修改网络:拦截代理
  • DNS修改:域名 -> 服务器IP 改为 域名 -> 代理IP ->服务器IP
  • Web服务器修改:响应重定向命令,即:客户端 -> 服务器 --305-> 客户端 -> 代理

3 追踪报文:via首部

  • via格式:(协议名) (协议版本) 节点名 (节点注释),括号内为可选项
  • 节点名:处于隐私的原因,可被隐藏,修改为假名替换

四 网关

1 常见的网关

  • 协议网关:如客户端 --HTTP--> 网关 --FTP--> ftp服务器
  • 资源网关:CGI(通用网关接口)

2 协议网关

(1)HTTP/*网关:HTTP ->其他协议的网关

注:常见的有HTTP/TCP,即外部使用Rest API,内部使用RPC(可为TCP)

(2)HTTPS/HTTP网关:HTTPS->HTTP的网关

  • 外网使用HTTPS保证安全,内部使用HTTP保证高效。

3 资源网关:CGI

  • CGI是一个标准接口集,Web服务器用它来装载程序以响应特定URL的HTTP请求,并收集程序的输出数据,将其放在HTTP响应中回送。
  • 起初CGI为每个请求建立一个进程,处理完成后销毁,后面这个开销太大,出现了快速CGI。
  • 快速CGI启动一个守护进程,并且使用开销更小的线程来代替进程去处理请求。

五 隧道

1 概述

  • 隧道使得HTTP应用程序可以发送非HTTP流量
  • 用于穿透只允许Web流量通过的防火墙

2 建立连接:参考RFC2817

# 请求报文
CONNECT server.example.com:80 HTTP/1.1
Host: server.example.com:80

# 响应报文
HTTP1.1 200 Connection Established

3 SSL隧道

  • 代理没有实际服务器的私钥(到时讲解SSL就知道了),无法建立SSL/TLS连接
  • 所以代理不再作为中间人,即不再改写请求内容,而是将数据原样传输给下一层代理(这也说明了SSL能够防止报文被篡改)。

参考:

posted @ 2018-11-26 15:52  月下小魔王  阅读(2398)  评论(0编辑  收藏  举报