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

HTTP起初是一个简单的协议,因此你可能会认为关于这个协议没有太多好说的。但现在,你手上拿着的却是一本将近两斤重的书。如果你对我们怎么会写出一本七百多页的关于 HTTP的书感到奇怪的话,可以去看一下目录。本书不仅仅是一本 HTTP首部的参考手册,它还是一本名副其实的 Web架构“圣经”。

本书中,我们将 HTTP中一些互相关联且常被误解的规则梳理清楚,并编写了一系列基于各种主题的章节,介绍了 HTTP各方面的特性。纵观全书,我们对 HTTP“为什么”这样做进行了详细的解释,而不仅仅停留在它是“怎么做”的。而且,为了节省大家寻找参考文献的时间,我们还介绍了很多 HTTP应用程序正常工作所必需且重要的非 HTTP技术。在条理清晰的附录中,可以找到按照字母排序的首部参考(这些首部构成了最常见的 HTTP文本的基础)。我们希望这种概念性的设计有助于读者更好地使用 HTTP。

本书是为所有希望理解 HTTP和 Web底层结构的人编写的。软 /硬件工程师也可以将本书作为 HTTP及相关 Web技术参考书使用。系统架构师和网络管理员可以通过本书更好地了解如何设计、实现并管理复杂的网络架构。性能工程师和分析人员可以从缓存和性能优化的相关章节中获益。市场营销和咨询专家还可以通过概念介绍更好地理解 Web技术的前景。

本书澄清了一些常见的误解,推荐了“各种业内诀窍”,提供了便捷的参考资料,并且用通俗易懂的语言阐述了枯燥且令人费解的标准规范,还详细探讨了 Web正常工作所必需且互相关联的技术。

本书创作历时良久,是由很热衷于因特网技术的人共同完成的,希望它能对你有所帮助。

运行实例: Joe的五金商店

本书的很多章节都涉及了一个假想的在线五金与家装商店实例,通过这个“ Joe的五金商店”来说明一些技术概念。我们为这个商店构建了一个真实的 Web站点(https://www.joes-hardware.com),以便大家能够测试书中的部分实例。只要本书仍在销售,我们就会一直维护好这个 Web站点。

本书内容

本书包含 21章,分为 5个逻辑部分(每部分都是一个技术专题),以及 8个很有用的附录,这些附录包含了参考资料,以及对相关技术介绍。

第一部分  HTTP:Web的基础

第二部分  HTTP结构

第三部分 识别、认证按全

第四部分 实体、编码和国际化

第五部分 内容发布与分发

第六部分 附录

第一部分用 4章的篇幅描述了 Web的基础构件与 HTTP的核心技术。

第 1章简要介绍了一下 HTTP。

第 2章详细阐述了统一资源定位符( Uniform Resource Locator,URL)的格式, URL在因特网上命名的各种类型的资源,还介绍了统一资源名( Uniform Resource Name,URN)的演变及未来的发展。

第 3章详细介绍了 HTTP报文是如何传送 Web内容的。

第 4章解释了 HTTP连接管理过程中一些经常会引起误解,并且很少有文献说明的 规则和行为。

第二部分重点介绍了 Web系统的结构构造块: HTTP服务器、代理、缓存、网关以及机器人应用程序。(当然, Web浏览器也是一种构造块,但在本书的第一部分已经对其进行过很详细的介绍了。)第二部分包含以下 6章。

第 5章简要介绍了 Web服务器结构。

第 6章深入研究了 HTTP代理服务器, HTTP代理服务器是作为 HTTP服务与控制平台使用的中间服务器。

第 7章深入研究了 Web缓存的问题——缓存是通过保存常用文档的本地副本来提高性能、减少流量的设备。

第 8章探讨了网关和应用服务器的概念,通过它们 HTTP就可以与使用不同协议(包括 SSL加密协议)的软件进行通信了。

第 9章介绍了 Web上的各种客户端类型,包括无处不在的浏览器、机器人和网络蜘蛛以及搜索引擎。

第 10章讲述了仍在研究之中的 HTTP协议: HTTP-NG协议。

第三部分提供了一套用于追踪身份、增强安全性以及控制内容访问的技术和技巧。包含下列 4章。

第 11章讨论了了一些识别用户的技术,以便向用户提供私人化的内容服务。

第 12章重点介绍了一些验证用户身份的基本方式。这一章还对 HTTP认证机制与数据库的接口问题进行了研究。

第 13章详述了摘要认证,摘要认证是对 HTTP的复合的、建议性的增强措施,可以大幅度提高其安全性。

第 14章说明了因特网的密码体系、数字证书以及 SSL。

第四部分含概(包含了实际 Web内容的) HTTP报文主体,一些用于描述和操纵报文主体所含内容的 Web标准。第四部分包含以下 3章。

第 15章介绍了 HTTP内容的结构。

第 16章探讨了一些 Web标准,通过这些标准,全球范围内的用户都可以交换以不同语言和字符集表示的内容。

第 17章解释了一些用于协商可接受内容的机制。

第五部分介绍了发布和传播 Web内容的技巧。包括以下 4章。

第 18章讨论了在现代的网站托管环境中布署服务器的方式, HTTP对虚拟网站托管的支持。

第 19章探讨了一些创建 Web内容,并将其装载到 Web服务器中去的技术。

第 20章介绍了能够将输入 Web流量分散到一组服务器上去的一些工具和技术。

第 21章介绍了一些日志格式和常见问题。

附录 A详述了统一资源描述符(Uniform Resource Identifier,URI)方案所支持的协议。

第六部分是一些很有用的参考附录,以及相关技术的教程。

• 附录 B列出了 HTTP的响应代码,方便使用。

• 附录 C提供了 HTTP首部字段的参考列表。

• 附录 D提供了大量的 MIME类型的列表,解释了 MIME类型的注册方式。

• 附录 E介绍了 HTTP认证中使用的 Base-64编码。

• 附录 F详述了如何实现 HTTP中的各种认证方案。

• 附录 G定义了 HTTP首部的语言标签值。

• 附录 H列出了用以支持国际化 HTTP的字符编码。

每章都包含很多实例,指出了其他参考相关的资料。

致谢

本书是很多人共同劳动的成果。五位作者要感谢一些人,感谢他们为这本书所作出的巨大贡献。 首先,我们要感谢 O’Reilly的编辑 Linda Mui。Linda早在 1996年就与 David和 Brian进行了首次接触,她还提炼了几个概念,并将其融入到今天大家拿到的这本书中。 Linda还帮助我们这帮首次写书、徘徊不定的人能够协调一致地按计划逐步完成(尽管我们完成得并不怎么快)。最重要的是, Linda给了我们一个创作此书的机会。我们要对她表示由衷地感谢。

我们还要感谢以下人士,他们非常聪明博学而且非常友善,为校对、注释并修订本书草稿花费了大量精力。他们是: Tony Bourke、Sean Burke、Mike Chowla、 Shernaz Daver、Fred Douglis、Paula Ferguson、Vikas Jha、Yves Lafon、Peter Mattis、Chuck Neerdaels、Luis Tavera、Duane Wessels、Dave Wu和 Marco Zagha。他们的一些观点和建议大大提升了本书的质量。

本书大部分精美的插图都是由 O’Reilly的 Rob Romano制作的。为了能够更加清晰地描述一些微妙的概念,本书使用了大量详尽备至的插图。其中很多插图制作起来都很费劲,而且还经过了大量的修改。如果一幅图相当于一千个字的话, Rob就相当于为本书增加了数百页的篇幅。

Brian还要特别感谢所有作者对本项目的付出。为了对 HTTP作出首次详细而又切实可行的剖析,作者们投入了大量的时间。其间虽然出现了婚礼、孩子出世、刻不容缓的工作项目、创业公司起步以及就读研究生院等诸多问题,但作者们的共同努力使这个项目得以圆满完成。我们相信,每个人的努力付出都是值得的,而且最重要的是,这项工作为大家提供了一项很有价值的服务。 Brian还要感谢 Inktomi的员工们,感谢他们的热情和支持,以及他们对 HTTP在实际应用程序中应用状况的深刻洞察力。同时,还要感谢 Cajun-shop.com允许我们使用他们的站点来展示书中的一些范例。

David要感谢他的家人,尤其是母亲和祖父长期以来不懈的支持。他要感谢那些在写书这几年中忍受他古怪作息习惯的家人们。他要对 Slurp、Orctomi和 Norma所做的一切表示感谢,还要感谢合作者们的辛勤工作。最后,他要感谢 Brian说服自己再次冒险。

Marjorie要感谢她丈夫 Alan Liu的技术洞察力,以及他对家庭的支持和理解。 Marjorie还要感谢合作者们丰富且深刻的灵感和洞察力。在编写过程中能够与他们共同工作,她感到非常开心。 Sailu要感谢 David和 Brian为他提供机会参与编写本书,并感谢 Chuck Neerdaels将他引入了 HTTP的世界。

Anshu要感谢他的妻子 Rashi和他的父母。尽管本书的编写旷日持久,但家人依旧对他有着足够的耐心,不断地支持并鼓励他。

最后,作者们要集体感谢各位著名和无名的因特网先驱们,他们在过去四十年中所做的研究、开发和传播工作对我们的科学研究、社会以及经济共同作出了巨大的贡献。没有他们的工作,就没有本书所要讨论的话题。

有关本书作译者

本书作者David Gourley是Endeca公司的CTO,负责Endeca公司知识导航产品的研究和开发。曾设计开发了Internet规模的搜索数据库的核心组件,并且是Web缓存产品的高级开发人员。加利福尼亚大学伯克利分校的计算机科学专业毕业。

作者Brian Totty为Ludic实验室的CEO,与人合作开发过Inktomi的搜索引擎数据库,负责过Inktomi的Web缓存技术和流媒体技术的开发。之前曾在美国硅图公司和苹果计算机的先进技术小组任研究员。具有伊利诺伊大学厄本那-香槟分校计算机科学博士学位和麻省理工学院计算机科学学士学位。

本书译者是来自解放军理工大学通信工程学院的陈涓老师。