3月阅读周·HTTP权威指南:集成点之资源网关篇

举报
叶一一 发表于 2025/03/22 14:05:35 2025/03/22
202 0 0
【摘要】 引言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来完成它们的任务。

资源网关

到目前为止,我们一直在讨论通过网络连接客户端和服务器的网关。但最常见的网关,应用程序服务器,会将目标服务器与网关结合在一个服务器中实现。

两个客户端是通过HTTP连接到应用程序服务器的。但应用程序服务器并没有回送文件,而是将请求通过一个网关应用编程接口(Application Programming Interface, API)发送给运行在服务器上的应用程序。

  • 收到客户端A的请求,根据URI将其通过API发送给一个数码摄相机应用程序。将得到的图片绑定到一条HTTP响应报文中,再回送给客户端,在客户端的浏览器中显示。
  • 客户端B的URI请求的是一个电子商务应用程序。客户端B的请求是通过服务器网关API发送给电子商务软件的,结果会被回送给浏览器。电子商务软件与客户端进行交互,引导用户通过一系列HTML页面来完成购物。

第一个流行的应用程序网关API就是通用网关接口(Common Gateway Interface,CGI)。CGI是一个标准接口集,Web服务器可以用它来装载程序以响应对特定URL的HTTP请求,并收集程序的输出数据,将其放在HTTP响应中回送。在过去的几年中,商业Web服务器提供了一些更复杂的接口,以便将Web服务器连接到应用程序上去。

早期的Web服务器是相当简单的,在网关接口的实现过程中采用的简单方式一直持续到了今天。

请求需要使用网关的资源时,服务器会请辅助应用程序来处理请求。服务器会将辅助应用程序所需的数据传送给它。通常就是整条请求,或者用户想在数据库上运行的请求(来自URL的请求字符串)之类的东西。

然后,它会向服务器返回一条响应或响应数据,服务器则会将其转发给客户端。服务器和网关是相互独立的应用程序,因此,它们的责任是分得很清楚的。

这个简单的协议(输入请求,转交,响应)就是最古老,也最常用的服务器扩展接口CGI的本质。

CGI

CGI是第一个,可能仍然是得到最广泛使用的服务器扩展。在Web上广泛用于动态HTML、信用卡处理以及数据库查询等任务。

CGI应用程序是独立于服务器的,所以,几乎可以用任意语言来实现,包括Perl、Tcl、C和各种shell语言。CGI很简单,几乎所有的HTTP服务器都支持它。图8-9显示了CGI模型的基本运行机制。

CGI的处理对用户来说是不可见的。从客户端的角度来看,就像发起一个普通请求一样。它完全不清楚服务器和CGI应用程序之间的转接过程。URL中出现字符cgi和可能出现的“? ”是客户端发现使用了CGI应用程序的唯一线索。

看来CGI是很棒的,对吧?嗯,好吧,既是也不是。它在服务器和众多的资源类型之间提供了一种简单的、函数形式的粘合方式,用来处理各种需要的转换。这个接口还能很好地保护服务器,防止一些糟糕的扩展对它造成的破坏(如果这些扩展直接与服务器相连,造成的错误可能会引发服务器崩溃)。

但是,这种分离会造成性能的耗费。为每条CGI请求引发一个新进程的开销是很高的,会限制那些使用CGI的服务器的性能,并且会加重服务端机器资源的负担。为了解决这个问题,人们开发了一种新型CGI——并将其恰当地称为快速CGI。这个接口模拟了CGI,但它是作为持久守护进程运行的,消除了为每个请求建立或拆除新进程所带来的性能损耗。

服务器扩展API

CGI协议为外部翻译器与现有的HTTP服务器提供了一种简洁的接口方式,但如果想要改变服务器自身的行为,或者只是想尽可能地提升能从服务器上获得的性能呢?服务器开发者为这两种需求提供了几种服务器扩展API,为Web开发者提供了强大的接口,以便他们将自己的模块与HTTP服务器直接相连。扩展API允许程序员将自己的代码嫁接到服务器上,或者用自己的代码将服务器的一个组件完整地替换出来。

大多数流行的服务器都会为开发者提供一个或多个扩展API。这些扩展通常都会绑定在服务器自身的结构上,所以,大多数都是某种服务器类型特有的。微软、网景、Apache和其他服务器都提供了一些API接口,允许开发者通过这些接口改变服务器的行为,或者为不同的资源提供一些定制的接口。这些定制接口为开发者提供了强大的接口方式。

微软的FPSE(FrontPage服务器端扩展)就是服务器扩展的一个实例,它为使用FrontPage的作者进行Web发布提供支持。FPSE能够对FrontPage客户端发送的RPC(remote procedure call,远程过程调用)命令进行解释。这些命令会在HTTP中(具体来说,就是在HTTP POST方法上)捎回。

总结

应用程序服务器是服务器端网关,与客户端通过HTTP进行通信,并与服务器端的应用程序相连。


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

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

作者其他文章

评论(0

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

    全部回复

    上滑加载中

    设置昵称

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

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

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