《HTTP权威指南》第一章 HTTP概述
引言
这一章是对全书的概括,个人感觉还是应该先把每一个知识点搞清楚了之后再回来看这一章,这样对每一部分都有清晰的认识,然后把整个知识网络连接起来,就能够明白网络是如何运行的了
该书首先以一个实例作为开篇,跟其他书籍一样,讲述浏览器输入网址时发生的过程
实例
当浏览器当作web客户端浏览一个页面时(比如 http://www.oreilly.com/index.html ) ,浏览器客户端会向服务器 www.oreilly.com 发送一条 HTTP 请求。服务器会去寻找所期望的对象(在这个例子中就是 /index.html),如果成功,就将对象、对象类型、对象长度以及其他一些信息放在 HTTP 响应中发送给客户端。
web资源
Web 服务器会为所有 HTTP 对象数据附加一个 MIME (Multipurpose Internet Mail Extension,多用途因特网邮件扩展)类型。当 Web 浏览器从服务器中取回一个对象时,会去查看相关的 MIME 类型,看看它是否知道应该如何处理这个对象。
MIME 类型是一种文本标记,表示一种主要的对象类型和一个特定的子类型,中间由一条斜杠来分隔。
HTML 格式的文本文档由 text/html 类型来标记。
普通的 ASCII 文本文档由 text/plain 类型来标记。
JPEG 格式的图片为 image/jpeg 类型。
GIF 格式的图片为 image/gif 类型。
每个 Web 服务器资源都有一个名字,这样客户端就可以说明它们感兴趣的资源是什么了。
服务器资源名被称为统一资源标识符(Uniform Resource Identifier,URI)。http://www.oreilly.com/index.html 就是一个URI,表示一个静态页面资源
下图显示了 URI 是怎样指示 HTTP 协议去访问 Joe 商店服务器上的图片资源的。给定了 URI,HTTP 就可以解析出对象。
URI 有两种形式,分别称为 URL 和 URN。现在我们分别来看看这些资源标识符类型。
URL
统一资源定位符(URL)由三部分组成。
URL 的第一部分被称为方案(scheme),说明了访问资源所使用的协议类型。这部分通常就是 HTTP 协议(http://)。
第二部分给出了服务器的因特网地址(比如,www.joes-hardware.com)。
其余部分指定了 Web 服务器上的某个资源(比如,/specials/saw-blade.gif)
URI 的第二种形式就是统一资源名(URN).URN 是作为特定内容的唯一名称使用的,与目前的资源所在地无关。使用这些与位置无关的 URN,就可以将资源四处搬移
事务
一个 HTTP 事务由一条请求命令和一个响应结果组成。
这种通信是通过名为HTTP 报文的格式化数据块进行的,如图所示。
应用程序完成一项任务时通常会发布多个 HTTP 事务。比如,Web 浏览器会发布一系列 HTTP 事务来获取并显示一个包含了丰富图片的 Web 页面。浏览器会执行一个事务来获取描述页面布局的 HTML"框架",然后发布另外的 HTTP 事务来获取每个嵌入式图片、图像面板、Java 小程序等。这些嵌入式资源甚至可能位于不同的服务器上。因此,一个"Web 页面"通常并不是单个资源,而是一组资源的集合。
报文
从 Web 客户端发往 Web 服务器的 HTTP 报文称为请求报文(request message)。从服务器发往客户端的报文称为响应报文(response message)
HTTP 报文包括以下三个部分。
1、起始行
报文的第一行就是起始行,在请求报文中用来说明要做些什么,在响应报文中说明出现了什么情况。
2、首部字段
起始行后面有零个或多个首部字段。每个首部字段都包含一个名字和一个值,为了便于解析,两者之间用冒号(:)来分隔。首部以一个空行结束。添加一个首部字段和添加新行一样简单。
3、主体
空行之后就是可选的报文主体了,其中包含了所有类型的数据。请求主体中包括了要发送给 Web 服务器的数据;响应主体中装载了要返回给客户端的数据。
起始行和首部都是文本形式且都是结构化的,而主体则不同,主体中可以包含任意的二进制数据(比如图片、视频、音轨、软件程序)。当然,主体中也可以包含文本
连接
报文是如何通过传输控制协议(Transmission Control Protocol,TCP)连接从一个地方搬移到另一个地方去的。
HTTP 是个应用层协议。HTTP 无需操心网络通信的具体细节;它把联网的细节都交给了通用、可靠的因特网传输协议 TCP/IP。
TCP 提供了:
无差错的数据传输;
按序传输(数据总是会按照发送的顺序到达);
未分段的数据流(可以在任意时刻以任意尺寸将数据发送出去)。
HTTP 协议位于 TCP 的上层。HTTP 使用 TCP 来传输其报文数据。与之类似,TCP 则位于 IP 的上层
在 HTTP 客户端向服务器发送报文之前,需要用网际协议(Internet Protocol,IP)地址和端口号在客户端和服务器之间建立一条 TCP/IP 连接。
建立一条 TCP 连接的过程与给公司办公室的某个人打电话的过程类似。首先,要拨打公司的电话号码。这样就能进入正确的机构了。其次,拨打要联系的那个人的分机号。
代理
Web 缓存(Web cache)或代理缓存(proxy cache)是一种特殊的 HTTP 代理服务器,可以将经过代理传送的常用文档复制保存起来。下一个请求同一文档的客户端就可以享受缓存的私有副本所提供的服务了。
保存常用文档本地副本以提高性能的代理缓存
客户端从附近的缓存下载文档会比从远程 Web 服务器下载快得多。HTTP 定义了很多功能,使得缓存更加高效,并规范了文档的新鲜度和缓存内容的隐私性。第 7 章介绍了缓存技术。
网关
网关(gateway)是一种特殊的服务器,作为其他服务器的中间实体使用。通常用于将 HTTP 流量转换成其他的协议。网关接受请求时就好像自己是资源的源端服务器一样。客户端可能并不知道自己正在与一个网关进行通信。
例如,一个 HTTP/FTP 网关会通过 HTTP 请求接收对 FTP URI 的请求,但通过 FTP 协议来获取文档(参见图 1-13)。得到的文档会被封装成一条 HTTP 报文,发送给客户端。
隧道
隧道(tunnel)是建立起来之后,就会在两条连接之间对原始数据进行盲转发的 HTTP 应用程序。HTTP 隧道通常用来在一条或多条 HTTP 连接上转发非 HTTP 数据,转发时不会窥探数据。
HTTP 隧道的一种常见用途是通过 HTTP 连接承载加密的安全套接字层(SSL, Secure Sockets Layer)流量,这样 SSL 流量就可以穿过只允许 Web 流量通过的防火墙了。如图 1-14 所示,HTTP/SSL 隧道收到一条 HTTP 请求,要求建立一条到目的地址和端口的输出连接,然后在 HTTP 信道上通过隧道传输加密的 SSL 流量,这 样就可以将其盲转发到目的服务器上去了。
agent代理
用户 Agent 代理(或者简称为 Agent 代理)是代表用户发起 HTTP 请求的客户端程序。所有发布 Web 请求的应用程序都是 HTTP Agent 代理。到目前为止,我们只提到过一种 HTTP Agent 代理:Web 浏览器,但用户 Agent 代理还有很多其他类型。
比如,有些自己会在 Web 上闲逛的自动用户 Agent 代理,可以在无人监视的情况下发布 HTTP 事务并获取内容。这些自动代理的名字通常都很生动,比如"网络蜘蛛"(spiders)或者"Web 机器人"(Web robots)(参见图 1-15)。网络蜘蛛会在 Web 上闲逛,搜集信息以构建有效的 Web 内容档案,比如一个搜索引擎的
数据库或者为比较购物机器人生成的产品目录