HTTP权威指南-5-6

第五章Web服务器

  • Web服务器处理请求的响应步骤
  1. 建立连接-接受一个/多个客户端的连接
  2. 接收请求-从网络中读取一条HTTP请求报文
  3. 处理请求-对请求报文进行解析,并采取行动
  4. 访问资源-访问报文中指定的资源
  5. 构建响应-创建带有正确首部的HTTP响应报文
  6. 发送响应-将响应回送给客户端
  7. 记录事务的处理过程-将已完成事务有关的内容记录在一个日志文件中。

第六章代理

  • Web代理(proxy)服务器是网络的中间实体,位于客户端和服务器之间扮演’中间人’的角色,在各断点之间来回传送HTTP报文。
Web的中间实体
  • 私有和共享代理
  • 代理与网关的比较
  1. 代理:连接的是两个或多个使用相同协议的应用程序
  2. 网关:连接的则是两个或多个使用不同协议的端点,网关扮演协议转换器的角色
为什么使用代理
  • 网站访问过滤
  • 文档访问权限控制
  • 安全防火墙
  • Web缓存
  • 反向代理
  • 内容路由
  • 转码器
  • 匿名者
代理去往何处
  • 代理服务器的部署
  1. 出口代理
  2. 访问(入口)代理
  3. 反向代理(取代原始服务器的代理服务器)
  4. 网络交换代理
  • 代理的层次结构(动态选择父子层次结构)
  1. 负载均衡
  2. 地理位置附近的路由
  3. 协议/类型路由
  4. 基于订购的路由
  • 代理是如何获取流量的
  1. 修改Web客户端
  2. 修改网络(拦截代理)拦截代理被称为透明代理因为你会在不知情的情况下连接到这些代理上去,但HTTP规范中已用”透明”来表示那些不会对语义进行修改的功能了,所以标准指定机构建议在流量捕获中使用术语拦截,这里采纳了这一术语。
  3. 修改DNS命名空间
  4. 修改Web服务器
客户端的代理设置
  • 手工配置
  • 预先配置浏览器
  • 代理的自动配置
  • WPAD(Web Proxy Autodiscovery Protocol)的代理发现;⚠️目前只有IE支持这一特性
与代理请求有关的一些棘手问题
  • 代理URI与服务器URI的不同(没有设置客户端使用代理时,它会发送部分URI。设置客户端使用代理时,它会发送完整URI)
a. 服务器请求
GET /index.html HTTP/1.0
User-agent: SuperBrowser v1.3

b. 显示 配置了代理请求
GET http://www.example.com/index.html HTTP/1.0
User-agent: SuperBrowser v1.3

c. 替代物反向代理(服务器主机名指向替代物代理)
GET /index.html HTTP/1.0
User-agent: SuperBrowser v1.3

d. 拦截代理请求
GET /index.html HTTP/1.0
User-agent: SuperBrowser v1.3
  • 代理既可以处理代理请求,也可以处理服务器请求
  • 转发过程中对URI的修改(HTTP规范禁止一般的拦截代理在转发URI时重写其绝对路径,唯一的例外是可以用”/”来取代空路径)
  • URI的客户端自动扩张和主机名解析
  • 没有代理时URI的解析,没有提供显示的代理时,浏览器会对部分主机名进行自动扩展。
  • 有显示代理时URI的解析,有显示设置代理时浏览器不会对不完整的主机名进行自动扩展,因此当用户在地址栏窗口中输入oreilly时,发给代理的就是http://oreilly/(浏览器添加了默认的方案和路径,但主机名和输入的一样)
  • 有拦截代理时URI的解析
追踪报文
  • Via首部(它列出了报文途径的每个中间节点(代理或网关)有关的信息,报文每经过一个节点,都必须将这个中间节点添加到Via列表的末尾),比如以下Via字符串告诉我们报文经过两个代理,以及分别实现的协议版本。
Via: 1.1 proxy-62.irenes-isp.net, 1.0 cacahe.joes-hardware.com
  • 响应Via通常与请求Via相反,比如请求是:’Via: 1.1 A, 1.0 B, 1.1 C’则响应是:’Via: 1.1 C, 1.0 B, 1.1 A’
  • Via与网关,有些代理会为使用非HTTP协议的服务器提供网关功能。Via首部会记录这些协议转换。
  • Via的隐私和安全问题
  • TRACE方法,HTTP/1.1的TRACE方法,用户可以追踪经代理链传输的请求报文,观察报文经过了哪些代理,以及每个代理是如果对请求报文进行修改的。
TRACE请求
TRACE /index.html HTTP/1.1
Host: www.example.com
Accept: text/html

TRACE响应:响应首部Content-Type为message/http 状态200
HTTP/1.1 200 OK
Content-Type: message/http
Coontent-Length: 269
Via: 1.1 cache.example.com, 1.1 p1123.att.net, 1.1 proxy.irenes-isp.net

TRACE /index.html HTTP/1.1
Host: www.example.com
Accept: text/html
Via: 1.1 proxy.irenes-isp.net, 1.1 p1123.att.net, 1.1 cache.example.com
...

可以使用Max-Forwards添加到首部限制最大转发次数

代理认证
  • Proxy Authorization
代理的互操作性
  • OPTIONS: 发现对可选特性的支持
  1. OPTIONS * HTTP/1.1 表示请求的整个服务器所支持的功能
  2. OPTIONS http://www.example.com/index.html HTTP/1.1 表示具体特定资源的可用特性
  • Allow首部,列出请求URI标识资源所支持的方法列表。也可以将Allow首部作为请求首部,建议在新建资源上支持某些方法。
C/Proxy C  ---> S : OPTIONS * HTTP/1.1
S ---> C/Proxy C :
HTTP/1.1 200 OK
Allow: GET, PUT, POST, HEAD, TRACE, OPTIONS

Proxy-Server wiki