3月阅读周·HTTP权威指南:代理之代理认证和互操作性篇
引言
HTTP(Hypertext Transfer Protocol,超文本传输协议[插图])是在万维网上进行通信时所使用的协议方案。HTTP有很多应用,但最著名的是用于Web浏览器和Web服务器之间的双工通信。
《HTTP权威指南》一书将HTTP中一些互相关联且常被误解的规则梳理清楚,并编写了一系列基于各种主题的章节介绍HTTP各方面的特性。纵观全书,对HTTP“为什么”这样做进行了详细的解释,而不仅仅停留在它是“怎么做”的。此外,这本书还介绍了很多HTTP应用程序正常工作所必需且重要的非HTTP技术。
这本书主要包括以下内容:
- 第一部分描述了Web的基础构件与HTTP的核心技术
- 第二部分重点介绍了Web系统的结构构造块:HTTP服务器、代理、缓存、网关以及机器人应用程序。
- 第三部分提供了一套用于追踪身份、增强安全性以及控制内容访问的技术和技巧。
- 第四部分涵盖HTTP报文主体和Web标准,前者包含实际内容,后者描述并处理主体内容。
- 第五部分介绍了发布和传播Web内容的技巧。
- 第六部分是一些很有用的参考附录,以及相关技术的教程。
代理
Web代理(proxy)服务器是网络的中间实体。代理位于客户端和服务器之间,扮演“中间人”的角色,在各端点之间来回传送HTTP报文。
代理认证
对受限内容的请求到达一台代理服务器时,代理服务器可以返回一个要求使用访问证书的407 Proxy Authorization Required状态码,以及一个用于描述怎样提供这些证书的Proxy-Authenticate首部字段。
- 客户端收到407响应时,会尝试着从本地数据库中,或者通过提示用户来搜集所需要的证书。
- 只要获得了证书,客户端就会重新发送请求,在Proxy-Authorization首部字段中提供所要求的证书。
- 如果证书有效,代理就会将原始请求沿着传输链路向下传送;否则,就发送另一条407应答。
若传输链路中有多个代理,且每个代理都要进行认证时,代理认证通常无法很好地工作。人们建议,应该对HTTP进行升级,将认证证书与代理链中特定的路标联系起来,但这些升级措施并没有得到广泛实现。
代理的互操作性
处理代理不支持的首部和方法
代理服务器可能无法理解所有经其传输的首部字段。有些首部可能比代理自身还要新;其他首部可能是特定应用程序独有的定制首部。代理必须对不认识的首部字段进行转发,而且必须维持同名首部字段的相对顺序。类似地,如果代理不熟悉某个方法,那么只要可能,就应该尝试着将报文转发到下一跳节点上去。
在当今的大部分网络中,如果代理不能转发它不支持的方法,可能就无法生存下去了,因为通过微软的Outlook进行Hotmail访问就大量地使用了HTTP扩展方法。
OPTIONS:发现对可选特性的支持
通过HTTP OPTIONS方法,客户端(或代理)可以发现Web服务器或者其上某个特定资源所支持的功能(比如,它们所支持的方法)。通过使用OPTIONS,客户端可以在与服务器进行交互之前,确定服务器的能力,这样它就可以更方便地与具备不同特性的代理和服务器进行互操作了。
如果OPTIONS请求的URI是个星号(*),请求的就是整个服务器所支持的功能。比如:
OPTIONS * HTTP/1.1
如果URI是个实际资源地址,OPTIONS请求就是在查询那个特定资源的可用特性:
OPTIONS http://www.joes-hardware.com/index.html HTTP/1.1
如果成功,OPTIONS方法就会返回一个包含了各种首部字段的200 OK响应,这些字段描述了服务器所支持的,或资源可用的各种可选特性。HTTP/1.1在响应中唯一指定的首部字段是Allow首部,这个首部用于描述服务器所支持的各种方法(或者服务器上的特定资源)。OPTIONS允许在可选的响应主体中包含更多的信息,但并没有对这种用法进行定义。
Allow首部
Allow实体首部字段列出了请求URI标识的资源所支持的方法列表,如果请求URI为*的话,列出的就是整个服务器所支持的方法列表。例如:
Allow: GET, HEAD, PUT
可以将Allow首部作为请求首部,建议在新的资源上支持某些方法。并不要求服务器支持这些方法,但应该在相应的响应中包含一个Allow首部,列出它实际支持的方法。
因为客户端可能已经通过其他途径与原始服务器进行了交流,所以即使代理无法理解指定的所有方法,也不能对Allow首部字段进行修改。
总结
代理可以作为访问控制设备使用。HTTP定义了一种名为代理认证(proxy authentication)的机制,这种机制可以阻止对内容的请求,直到用户向代理提供了有效的访问权限证书为止。
客户端、服务器和代理是由不同厂商构建的,实现的是不同版本的HTTP规范。它们支持的特性各不相同,也存在着不同的问题。代理服务器位于客户端和服务器设备之间,这些设备实现的协议可能有所不同,可能存在着很棘手的问题。
作者介绍
非职业「传道授业解惑」的开发者叶一一。
《趣学前端》、《CSS畅想》等系列作者。华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。
如果看完文章有所收获,欢迎点赞👍 | 收藏⭐️ | 留言📝。
- 点赞
- 收藏
- 关注作者
评论(0)