前言

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

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

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

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

1 HTTP 译为“超文本传输协议”,其中“transfer”使用了“传输”的含义,但依据 HTTP 制定者之一 Roy Fielding 博士的论文,“transfer”表示的是“(状态的)转移”,而不是“传输”。怎样翻译才更符合 HTTP 的原意,其讨论可参见ManBetX社区的文章,地址是 b453m.com/article/details/1817

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

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

运行实例:Joe的五金商店

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

第四部分涵盖 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 的字符编码。

每章都包含很多实例,以及到其他相关的参考资料的链接。

排版约定

本书使用了下列排版约定。

  • 楷体

    用于 URL、C 函数、命令名、MIME 类型、新术语的定义以及重点内容。

  • 等宽字体

    用于计算机的输出、代码以及所有文字文本。

  • 加粗等宽字体

    用于用户的输入。

意见及问题

请将有关此书的意见及问题发给出版商:

美国:

O'Reilly Media, Inc.

1005 Gravenstein Highway North

Sebastopol, CA 95472

中国:

北京市西城区西直门南大街 2 号成铭大厦 C 座 807 室(100035)

奥莱利技术咨询(北京)有限公司

本书有一个 Web 页面,上面列出了勘误表、一些实例以及所有的附加信息。可以通过以下链接来访问这个页面。

为本书提意见或者询问一些技术性问题,可以向以下地址发送邮件。

[email protected]

更多与书籍、会议、资源中心以及 O’Reilly 网络有关的问题,都请参见 O'Reilly 的网站。

致谢

本书是很多人共同劳动的成果。五位作者要感谢一些人,感谢他们为这本书所作出的巨大贡献。

首先,我们要感谢 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 在实际应用程序中应用状况的深刻洞察力。同时,还要感谢 允许我们使用他们的站点来展示书中的一些范例。

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

Marjorie 要感谢她丈夫 Alan Liu 的技术洞察力,以及他对家庭的支持和理解。Marjorie 还要感谢合作者们丰富且深刻的灵感和洞察力。在编写过程中能够与他们共同工作,她感到非常开心。

Sailu 要感谢 David 和 Brian 为他提供机会参与编写本书,感谢 Chuck Neerdaels 将他引入了 HTTP 的世界。

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

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

目录

  • 版权声明
  • O'Reilly Media, Inc.介绍
  • 前言
  • 第一部分 HTTP:Web 的基础
  • 第1章 HTTP 概述
  • 第2章 URL 与资源
  • 第3章 HTTP 报文
  • 第4章 连接管理
  • 第二部分 HTTP 结构
  • 第5章 Web 服务器
  • 第6章 代理
  • 第7章 缓存
  • 第8章 集成点:网关、隧道及中继
  • 第9章 Web 机器人
  • 第10章 HTTP-NG
  • 第三部分 识别、认证与安全
  • 第11章 客户端识别与 cookie 机制
  • 第12章 基本认证机制
  • 第13章 摘要认证
  • 第14章 安全 HTTP
  • 第四部分 实体、编码和国际化
  • 第15章 实体和编码
  • 第16章 国际化
  • 第17章 内容协商与转码
  • 第五部分 内容发布与分发
  • 第18章 Web 主机托管
  • 第19章 发布系统
  • 第20章 重定向与负载均衡
  • 第21章 日志记录与使用情况跟踪
  • 第六部分 附录
  • 附录 A URI 方案
  • 附录 B HTTP 状态码
  • 附录 C HTTP 首部参考
  • 附录 D MIME 类型(一)
  • 附录 D MIME 类型(二)
  • 附录 D MIME 类型(三)
  • 附录 D MIME 类型(四)
  • 附录 D MIME 类型(五)
  • 附录 E Base-64 编码
  • 附录 F 摘要认证
  • 附录 G 语言标记(一)
  • 附录 G 语言标记(二)
  • 附录 G 语言标记(三)
  • 附录 G 语言标记(四)
  • 附录 H MIME 字符集注册表(一)
  • 附录 H MIME 字符集注册表(二)
  • 附录 H MIME 字符集注册表(三)
  • 关于作者
  • 尾页