3月阅读周·HTTP权威指南:HTTP-NG篇
引言
HTTP(Hypertext Transfer Protocol,超文本传输协议[插图])是在万维网上进行通信时所使用的协议方案。HTTP有很多应用,但最著名的是用于Web浏览器和Web服务器之间的双工通信。
《HTTP权威指南》一书将HTTP中一些互相关联且常被误解的规则梳理清楚,并编写了一系列基于各种主题的章节介绍HTTP各方面的特性。纵观全书,对HTTP“为什么”这样做进行了详细的解释,而不仅仅停留在它是“怎么做”的。此外,这本书还介绍了很多HTTP应用程序正常工作所必需且重要的非HTTP技术。
这本书主要包括以下内容:
- 第一部分描述了Web的基础构件与HTTP的核心技术
- 第二部分重点介绍了Web系统的结构构造块:HTTP服务器、代理、缓存、网关以及机器人应用程序。
- 第三部分提供了一套用于追踪身份、增强安全性以及控制内容访问的技术和技巧。
- 第四部分涵盖HTTP报文主体和Web标准,前者包含实际内容,后者描述并处理主体内容。
- 第五部分介绍了发布和传播Web内容的技巧。
- 第六部分是一些很有用的参考附录,以及相关技术的教程。
HTTP-NG
HTTP发展中存在的问题
HTTP最初被设想为一种简单的技术,用于访问分布式信息服务器上链接的多媒体内容。但在过去的十年中,HTTP及其衍生产品起到了更为广泛的作用。
HTTP/1.1现在提供了可以追踪文档版本的标记和指纹,提供了一些方法来支持文档的上传以及与可编程网关之间的交互,还提供对多语言内容、安全及认证功能、降低流量的缓存功能、减小时延的管道功能、降低启动时间提高带宽使用效率的持久连接,以及用来进行部分更新的访问范围功能的支持。HTTP的扩展及衍生产品具有更为广泛的功能,可以提供对文档发布、应用程序服务、任意的消息服务、视频流以及无线多媒体访问的支持。HTTP正在成为分布式多媒体应用程序的“操作系统”。
尽管HTTP/1.1的设计经过了充分的考量,但随着HTTP被越来越多地用作复杂远程操作的统一载体,HTTP/1.1已经开始显现出了一些局限性。HTTP的发展中至少存在4个方面的问题。
- 复杂性:HTTP相当复杂,而且其特性之间是相互依存的。由于存在一些复杂的、相互交织的要求,以及连接管理、报文处理和功能逻辑之间的混合作用,要想正确地实现HTTP软件肯定是非常痛苦、很容易出错的。
- 可扩展性:HTTP很难实现递增式扩展。很多流传下来的HTTP应用程序中都没有自主的功能性扩展技术,使协议的扩展无法兼容。
- 性能:HTTP中有些部分效率不高。其中很多低效特性会随着高时延、低吞吐量的无线访问技术的广泛使用而变得更加严重。
- 传输依赖性:HTTP是围绕TCP/IP网络协议栈设计的。尽管没有限制说不能使用替代协议栈,但在这方面所做的工作非常少。HTTP要为替代协议栈提供更多的支持,才能作为一个更广阔的报文发送平台应用于嵌入式和无线应用程序之中。
HTTP-NG的活动
1997年夏天,万维网联盟启动了一个特殊项目,调查并提出一个新的HTTP版本,以修正与复杂性、可扩展性、性能及传输依赖性有关的一些问题。这个新的HTTP被称为HTTP:下一代系统(HTTP-NG)。
在1998年12月举行的一次IETF会议上,提出了一组HTTP-NG建议。这些建议勾勒出了一种可能的HTTP主要发展方向。这项技术还未被广泛采用(可能永远也不会被广泛采用了),但HTTP-NG确实在扩展HTTP系统方面做出了最认真的努力。下面我们来仔细看看HTTP-NG。
模块化及功能增强
可以用三个英语单词来描述HTTP-NG的主题:“模块化及功能增强”(modularize and enhance)。如图10-1所示,HTTP-NG工作组建议将协议模块化为三层,而不是将连接管理、报文处理、服务器处理逻辑和协议方法全都混在一起。
- 第一层,报文传输层(message transport layer),这一层不考虑报文的功能,而是致力于端点间报文的不透明传输。报文传输层支持各种子协议栈(比如无线环境下的协议栈),主要负责处理高效报文传输及处理方面的问题。HTTP-NG项目组为本层提出了一个名为WebMUX的协议。
- 第二层,远程调用层(remote invocation layer),定义了请求/响应的功能,客户端可以通过这些功能调用对服务器资源的操作。本层独立于报文的传输以及操作的精确语义。它只是提供了一种标准的方法来调用服务器上所有的操作。本层试图提供一种像CORBA、DCOM和Jave RMI那样的面向对象的可扩展框架,而不是HTTP/1.1中那种静态的、服务器端定义的方法。HTTP-NG项目组建议本层使用二进制连接协议(Binary Wire Protocol)。
- 第三层,Web应用层(Web application layer),提供了大部分的内容管理逻辑。所有的HTTP/1.1方法(GET、POST、PUT等),以及HTTP/1.1首部参数都是在这里定义的。本层还支持其他构建在远程调用基础上的服务,比如WebDAV。
只要将HTTP组件模块化了,就可以对其进行改进,以提供更好的性能和更丰富的特性。
分布式对象
HTTP-NG的很多基本原理和功能目标都是从CORBA和DCOM这样的结构化、面向对象的分布式对象系统中借鉴来的。分布式对象系统对可扩展性和功能特性都很有帮助。
从1996年开始,一个研究团体就在争论是否要将HTTP与更复杂的分布式对象系统聚合在一起。在Web中使用分布式对象模型有很多好处,更多与此相关的信息请查阅Xerox PARC早期名为“Migrating the Web Toward Distributed Objects”(“Web向分布式对象的迁移”)的文章。
将Web和分布式对象统一起来的雄心使得HTTP-NG的应用受到了某些社团的抵制。过去的一些分布式对象系统受到了重量级实现方案和形式上复杂性的影响。HTTP-NG项目组也尝试去解决需求中提到的一些问题。
WebMUX
HTTP-NG工作组花费了很多精力,为报文传输开发了WebMUX标准。WebMUX是一个复杂的高性能报文系统,通过这个系统,可以在一个复用的TCP连接上并行地传输报文。可以对以不同速度产生和消耗的独立报文流进行高效的分组,并将其复用到一条或少数几条TCP连接上去。
WebMUX协议的关键目标包括如下几条。
- 设计简单。
- 高性能。
- 复用——可以在一条连接上动态、高效地交错传递多个(使用任意高层协议的)数据流,不用因为等待那些速度很慢的生产者程序而延迟数据的传输。
- 基于信用的流量控制——数据是以不同的速率产生和消耗的,发送者和接收者的内存和可用的CPU资源都有所不同。WebMUX使用的是“基于信用的”流量控制方案,接收者可以预先声明期望的数据接收速度,防止出现资源缺乏产生的死锁。
- 保持对齐——保持复用流中数据的对齐,这样才能有效地发送并处理二进制数据。
- 丰富的功能——接口足够丰富,能支持套接字API。
总结
从某些方面来说,HTTP应用的步伐已经超越了其设计。现在,人们将HTTP作为各种不同应用程序的基础,并将其运行在很多不同的联网技术之上。
作者介绍
非职业「传道授业解惑」的开发者叶一一。
《趣学前端》、《CSS畅想》等系列作者。华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。
如果看完文章有所收获,欢迎点赞👍 | 收藏⭐️ | 留言📝。
- 点赞
- 收藏
- 关注作者
评论(0)