HTTP权威指南-5-6
2016-10-01第五章Web服务器
- Web服务器处理请求的响应步骤
- 建立连接-接受一个/多个客户端的连接
- 接收请求-从网络中读取一条HTTP请求报文
- 处理请求-对请求报文进行解析,并采取行动
- 访问资源-访问报文中指定的资源
- 构建响应-创建带有正确首部的HTTP响应报文
- 发送响应-将响应回送给客户端
- 记录事务的处理过程-将已完成事务有关的内容记录在一个日志文件中。
第六章代理
- Web代理(proxy)服务器是网络的中间实体,位于客户端和服务器之间扮演’中间人’的角色,在各断点之间来回传送HTTP报文。
Web的中间实体
- 私有和共享代理
- 代理与网关的比较
- 代理:连接的是两个或多个使用
相同协议
的应用程序- 网关:连接的则是两个或多个使用
不同协议
的端点,网关扮演协议转换器
的角色
为什么使用代理
- 网站访问过滤
- 文档访问权限控制
- 安全防火墙
- Web缓存
- 反向代理
- 内容路由
- 转码器
- 匿名者
代理去往何处
- 代理服务器的部署
- 出口代理
- 访问(入口)代理
- 反向代理(取代原始服务器的代理服务器)
- 网络交换代理
- 代理的层次结构(动态选择父子层次结构)
- 负载均衡
- 地理位置附近的路由
- 协议/类型路由
- 基于订购的路由
- 代理是如何获取流量的
- 修改Web客户端
- 修改网络(拦截代理)拦截代理被称为
透明代理
因为你会在不知情的情况下连接到这些代理上去,但HTTP规范中已用”透明”来表示那些不会对语义进行修改的功能了,所以标准指定机构建议在流量捕获中使用术语拦截
,这里采纳了这一术语。 - 修改DNS命名空间
- 修改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: 发现对可选特性的支持
- OPTIONS * HTTP/1.1 表示请求的整个服务器所支持的功能
- 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