3月阅读周·HTTP权威指南:集成点之应用程序接口和Web服务篇

举报
叶一一 发表于 2025/03/22 14:05:54 2025/03/22
【摘要】 引言HTTP(Hypertext Transfer Protocol,超文本传输协议[插图])是在万维网上进行通信时所使用的协议方案。HTTP有很多应用,但最著名的是用于Web浏览器和Web服务器之间的双工通信。《HTTP权威指南》一书将HTTP中一些互相关联且常被误解的规则梳理清楚,并编写了一系列基于各种主题的章节介绍HTTP各方面的特性。纵观全书,对HTTP“为什么”这样做进行了详细的解...

引言

HTTP(Hypertext Transfer Protocol,超文本传输协议[插图])是在万维网上进行通信时所使用的协议方案。HTTP有很多应用,但最著名的是用于Web浏览器和Web服务器之间的双工通信。

《HTTP权威指南》一书将HTTP中一些互相关联且常被误解的规则梳理清楚,并编写了一系列基于各种主题的章节介绍HTTP各方面的特性。纵观全书,对HTTP“为什么”这样做进行了详细的解释,而不仅仅停留在它是“怎么做”的。此外,这本书还介绍了很多HTTP应用程序正常工作所必需且重要的非HTTP技术。

这本书主要包括以下内容:

  • 第一部分描述了Web的基础构件与HTTP的核心技术
  • 第二部分重点介绍了Web系统的结构构造块:HTTP服务器、代理、缓存、网关以及机器人应用程序。
  • 第三部分提供了一套用于追踪身份、增强安全性以及控制内容访问的技术和技巧。
  • 第四部分涵盖HTTP报文主体和Web标准,前者包含实际内容,后者描述并处理主体内容。
  • 第五部分介绍了发布和传播Web内容的技巧。
  • 第六部分是一些很有用的参考附录,以及相关技术的教程。

集成点:网关、隧道及中继

事实证明,Web是一种强大的内容发布工具。随着时间的流逝,人们已经从只在网上发送静态的在线文档,发展到共享更复杂的资源,比如数据库内容或动态生成的HTML页面。Web浏览器这样的HTTP应用程序为用户提供了一种统一的方式来访问因特网上的内容。

HTTP也已成为应用程序开发者的一种基本构造模块,开发者们可以在HTTP上捎回其他的协议内容(比如,可以将其他协议的流量包裹在HTTP中,用HTTP通过隧道或中继方式将这些流量传过公司的防火墙)。Web上所有的资源都可以使用HTTP协议,而且其他应用程序和应用程序协议也可以利用HTTP来完成它们的任务。

应用程序接口和Web服务

可以将资源网关作为Web服务器与应用程序的通信方式使用。更广泛地说,随着Web应用程序提供的服务类型越来越多,有一点变得越来越清晰了:HTTP可以作为一种连接应用程序的基础软件来使用。在将应用程序连接起来的过程中,一个更为棘手的问题是在两个应用程序之间进行协议接口的协商,以便这些应用程序可以进行数据的交换——这通常都是针对具体应用程序的个案进行的。

应用程序之间要配合工作,所要交互的信息比HTTP首部所能表达的信息要复杂得多。

因特网委员会开发了一组允许Web应用程序之间相互通信的标准和协议。尽管Web服务(Web service)可以用来表示独立的Web应用程序(构造模块),这里我们还是宽松地用这个术语来表示这些标准。Web服务的引入并不新鲜,但这是应用程序共享信息的一种新机制。Web服务是构建在标准的Web技术(比如HTTP)之上的。

Web服务可以用XML通过SOAP来交换信息。XML(Extensible Markup Language,扩展标记语言)提供了一种创建数据对象的定制信息,并对其进行解释的方法。SOAP(Simple Object Access Protocol,简单对象访问协议)是向HTTP报文中添加XML信息的标准方式

隧道

我们已经讨论了几种不同的方式,通过这些方式可以用HTTP对不同类型的资源进行访问(通过网关),或者是用HTTP来启动应用程序到应用程序的通信。在本节中,我们要看看HTTP的另一种用法——Web隧道(Web tunnel),这种方式可以通过HTTP应用程序访问使用非HTTP协议的应用程序。

用CONNECT建立HTTP隧道

Web隧道是用HTTP的CONNECT方法建立起来的。CONNECT方法并不是HTTP/1.1核心规范的一部分,[插图]但却是一种得到广泛应用的扩展。可以在Ari Luotonen的过期因特网草案规范“Tunneling TCP based protocols through Web proxy servers”(“通过Web代理服务器用隧道方式传输基于TCP的协议”),或他的著作Web Proxy Servers中找到这些技术规范。

CONNECT方法请求隧道网关创建一条到达任意目的服务器和端口的TCP连接,并对客户端和服务器之间的后继数据进行盲转发。

  • 客户端发送了一条CONNECT请求给隧道网关。客户端的CONNECT方法请求隧道网关打开一条TCP连接(在这里,打开的是到主机orders.joes-hardware.com的标准SSL端口443的连接)。
  • 创建TCP连接。
  • 一旦建立了TCP连接,网关就会发送一条HTTP 200 Connection Established响应来通知客户端。
  • 此时,隧道就建立起来了。客户端通过HTTP隧道发送的所有数据都会被直接转发给输出TCP连接,服务器发送的所有数据都会通过HTTP隧道转发给客户端。

上述步骤描述了一条SSL隧道,其中的SSL流量是在一条HTTP连接上发送的,但是通过CONNECT方法可以与使用任意协议的任意服务器建立TCP连接的。

1.CONNECT请求

除了起始行之外,CONNECT的语法与其他HTTP方法类似。一个后面跟着冒号和端口号的主机名取代了请求URI。主机和端口都必须指定:

CONNECT home.netscape.com:443 HTTP/1.0
User-agent: Mozilla/4.0

和其他HTTP报文一样,起始行之后,有零个或多个HTTP请求首部字段。这些行照例以CRLF结尾,首部列表以一个仅有CRLF的空行结束。

2.CONNECT响应

发送了请求之后,客户端会等待来自网关的响应。和普通HTTP报文一样,响应码200表示成功。按照惯例,响应中的原因短语通常被设置为“Connection Established”:

HTTP/1.0200 Connection Established
Proxy-agent: Netscape-Proxy/1.1

与普通HTTP响应不同,这个响应并不需要包含Content-Type首部。此时连接只是对原始字节进行转接,不再是报文的承载者,所以不需要使用内容类型了。

数据隧道、定时及连接管理

管道化数据对网关是不透明的,所以网关不能对分组的顺序和分组流作任何假设。一旦隧道建立起来了,数据就可以在任意时间流向任意方向了。

作为一种性能优化方法,允许客户端在发送了CONNECT请求之后,接收响应之前,发送隧道数据。这样可以更快地将数据发送给服务器,但这就意味着网关必须能够正确处理跟在请求之后的数据。尤其是,网关不能假设网络I/O请求只会返回首部数据,网关必须确保在连接准备就绪时,将与首部一同读进来的数据发送给服务器。在请求之后以管道方式发送数据的客户端,如果发现回送的响应是认证请求,或者其他非200但不致命的错误状态,就必须做好重发请求数据的准备。

如果在任意时刻,隧道的任意一个端点断开了连接,那个端点发出的所有未传输数据都会被传送给另一个端点,之后,到另一个端点的连接也会被代理终止。如果还有数据要传输给关闭连接的端点,数据会被丢弃。

SSL隧道

最初开发Web隧道是为了通过防火墙来传输加密的SSL流量。很多组织都会将所有流量通过分组过滤路由器和代理服务器以隧道方式传输,以提升安全性。但有些协议,比如加密SSL,其信息是加密的,无法通过传统的代理服务器转发。隧道会通过一条HTTP连接来传输SSL流量,以穿过端口80的HTTP防火墙。

为了让SSL流量经现存的代理防火墙进行传输,HTTP中添加了一项隧道特性,在此特性中,可以将原始的加密数据放在HTTP报文中,通过普通的HTTP信道传送。

通常会用隧道将非HTTP流量传过端口过滤防火墙。这一点可以得到很好的利用,比如,通过防火墙传输安全SSL流量。但是,这项特性可能会被滥用,使得恶意协议通过HTTP隧道流入某个组织内部。

SSL隧道与HTTP/HTTPS网关的对比

可以像其他协议一样,对HTTPS协议(SSL上的HTTP)进行网关操作:由网关(而不是客户端)初始化与远端HTTPS服务器的SSL会话,然后代表客户端执行HTTPS事务。响应会由代理接收并解密,然后通过(不安全的)HTTP传送给客户端。这是网关处理FTP的方式。但这种方式有几个缺点:

  • 客户端到网关之间的连接是普通的非安全HTTP;
  • 尽管代理是已认证主体,但客户端无法对远端服务器执行SSL客户端认证(基于X509证书的认证);
  • 网关要支持完整的SSL实现。

注意,对于SSL隧道机制来说,无需在代理中实现SSL。SSL会话是建立在产生请求的客户端和目的(安全的)Web服务器之间的,中间的代理服务器只是将加密数据经过隧道传输,并不会在安全事务中扮演其他的角色。

隧道认证

在适当的情况下,也可以将HTTP的其他特性与隧道配合使用。尤其是,可以将代理的认证支持与隧道配合使用,对客户端使用隧道的权利进行认证。

隧道的安全性考虑

总的来说,隧道网关无法验证目前使用的协议是否就是它原本打算经过隧道传输的协议。因此,比如说,一些喜欢捣乱的用户可能会通过本打算用于SSL的隧道,越过公司防火墙传递因特网游戏流量,而恶意用户可能会用隧道打开Telnet会话,或用隧道绕过公司的E-mail扫描器来发送E-mail。

为了降低对隧道的滥用,网关应该只为特定的知名端口,比如HTTPS的端口443,打开隧道。

总结

Web隧道允许用户通过HTTP连接发送非HTTP流量,这样就可以在HTTP上捎带其他协议数据了。使用Web隧道最常见的原因就是要在HTTP连接中嵌入非HTTP流量,这样,这类流量就可以穿过只允许Web流量通过的防火墙了。


作者介绍
非职业「传道授业解惑」的开发者叶一一。
《趣学前端》、《CSS畅想》等系列作者。华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。
如果看完文章有所收获,欢迎点赞👍 | 收藏️ | 留言📝

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。