《HTTP权威指南》-第6章 代理
Web 代理(proxy)服务器是网络的中间实体。代理位于客户端和服务器之间,扮演“中间人”的角色,在各端点之间来回传送HTTP 报文。
6.1 Web的中间实体
HTTP 的代理服务器既是Web 服务器又是Web 客户端。
HTTP 客户端会向代理发送请求报文,代理服务器必须像Web 服务器一样,正确地处理请求和连接,然后返回响应。同时,代理自身要向服务器发送请求,这样,其行为就必须像正确的HTTP客户端一样,要发邀请求并接收响应。
6.1.1 私有和共享代理
- 公共代理
- 私有代理
6.1.2 代理与网关的对比
代理连接的是两个或多个使用相同协议的应用程序,而网关连接的则是两个或多个使用不同协议的端点。网关扮演的是“协议转换器”的角色,即使客户端和服务器使用的是不同的协议,客户端也可以通过它完成与服务器之间的事务处理。
6.2 为什么使用代理
- 儿童过滤器
- 文档访问控制
- 安全防火墙
- Web 缓存
- 反向代理
- 内容路由器
- 转码器
代理服务器在将内容发送给客户端之前,可以修改内容的主体格式.在这些数据表示在去之间进行的透明转换被称为转码。
- 匿名者
6.3 代理会去往何处
6.3.1 代理服务器的部署
- 出口代理
- 访问(入口)代理
- 反向代理
- 网络交换代理
6.3.2 代理的层次结构
代理层次结构的内容路由
动态选择父代理:
- 负载均衡
- 地理位置附近的路由
- 协议/类型路由
- 基于订购的路由
6.3.3 代理是如何获取流量的
- 修改客户端
很多Web 客户端,包括网景和微软的浏览器,都支持手工和自动的代理配置。
如果将客户端配置为使用代理服务器,客户端就会将HTTP 请求有意地直接发送给代理,而不是原始服务器。 - 修改网络
网络基础设施可以通过若干种技术手段,在客户端不知道,或没有参与的情况下,拦截网络流量并将其导入代理。 - 修改DNS 的命名空间
放在Web 服务器之前的代理服务器一一替代物,会直接假扮Web 服务器的名字和IP 地址。 - 修改Web 服务器。
状态码:305。
6.4 客户端的代理设置
- 手工配置
- 预先配置浏览器
- 代理的自动配置(Proxy Auto-Configuration, PAC)
- WPAD 的代理发现
6.4.1 客户端的代理配置:手工配置
6.4.2 客户端代理配置: PAC文件
PAC 文件是一些小型的JavaScript 程序,可以在运行过程中计算代理设置,因此,是一种更动态的代理配置解决方案。
6.4.3 客户端代理配置: WPAD
- 用WPAD 找到PAC 的URI,
- 从指定的URI 获取PAC 文件,
- 执行PAC 文件来判定代理服务器,
- 为请求使用代理服务器。
当前的WPAD 协议规范按顺序定义了下列技术g
- 动态主机配置协议( Dynamic Host Configuration Protocol, DHCP ) ,
- 服务定位协议(Service Location Protocol, SL肘,
- DNS 知名主机名,
- DNS SRV 记录,TXT 记录中的DNS 服务URI.
6.5 与代理请求有关的一些棘手问题
- 代理请求中的URI 和服务器请求中的U阳有何不同,
- 拦截和反向代理是如何将服务器主机信息隐藏起来的g
- 修改URI 的规则g
- 代理是怎样影响浏览器的智能U阳自动完成机制,或主机名扩展特性的。
6.5.1 代理URI与服务器URI 的不同
(1)没有设置客户端使用代理时,它会发送部分URI。
(2)设置客户端使用代理时,它会发送完整URI
6 .5.2 与虚拟主机一样的问题
代理“缺少方案/主机/端口”的问题与虚拟主机Web 服务器面临的问题相同。虚拟主机Web 服务器会在很多Web 站点间共享同一个物理Web 服务器。
- 显式的代理要求在请求报文中使用完整URI 来解决这个问题。
- 虚拟主机Web 服务器要求使用Host 首部来承载主机和端口信息。
6.5.3 拦截代理会收到部分URI
- 如前所述,反向代应是一个用来取代原始服务器的代理服务器,它通常会通过假扮服务器的主机名或IP 地址来做到这一点。
- 拦截代理是网络流量中的代理服务器,它会拦截从客户端发往服务器的请求,并提供一个缓存响应,或对其进行转发。
6.5.4 代理既可以处理代理请求,也可以处理服务器请求。
6.5.5 转发过程中对URI的修改
HTTP 规施禁止一般的拦截代理在转发URI 时重写其绝对路径部分。唯一的例外是可以用”/”采取代空路径。
6.5.6 URI的客户端自动扩展和主机名解析
6.5.7 没有代理时URI 的解析