1MIME

媒体类型

因特网上有数千种不同的数据类型,HTTP 仔细地给每种要通过Web 传输的对

象都打上了名为MIME 类型(MIME type的数据格式标签。最初设计MIME

Multipurpose Internet Mail Extension,多用途因特网邮件扩展)是为了解决在不同

的电子邮件系统之间搬移报文时存在的问题。MIME 在电子邮件系统中工作得非常

好,因此HTTP 也采纳了它,用它来描述并标记多媒体内容。

Web 服务器会为所有HTTP 对象数据附加一个MIME 类型(参见图1-3)。当Web

浏览器从服务器中取回一个对象时,会去查看相关的MIME 类型,看看它是否知道

应该如何处理这个对象。大多数浏览器都可以处理数百种常见的对象类型:显示图

片文件、解析并格式化HTML 文件、通过计算机声卡播放音频文件,或者运行外部

5 插件软件来处理特殊格式的数据。

MIME 类型是一种文本标记,表示一种主要的对象类型和一个特定的子类型,中间

由一条斜杠来分隔。

HTML 格式的文本文档由 text/html 类型来标记。

普通的 ASCII 文本文档由 text/plain 类型来标记。

JPEG 格式的图片为 p_w_picpath/jpeg 类型。

GIF 格式的图片为 p_w_picpath/gif 类型。

总结:WEB服务器为web客户端请求的资源加一个MIME类型,就是为了让web客户端(浏览器)能区别不同的对象,该如何处理。

2、统一资源标识符(Uniform Resource IdentifierURI

URI 有两种形式,分别称为URL URN

url:统一资源定位符URL

大部分URL 都遵循一种标准格式,这种格式包含三个部分。

URL 的第一部分被称为方案(scheme),说明了访问资源所使用的协议类型。这

部分通常就是HTTP 协议(http://)。

第二部分给出了服务器的因特网地址(比如,www.joes-hardware.com)。

其余部分指定了 Web 服务器上的某个资源(比如,/specials/saw-blade.gif)。

现在,几乎所有的URI 都是URL

urn: URI 的第二种形式就是统一资源名(URNURN 仍然处于试验阶段

比如,不论因特网标准文档RFC 2141 位于何处(甚至可以将其复制到多个地方),

都可以用下列URN 来命名它:

urn:ietf:rfc:2141

3、方法

HTTP 支持几种不同的请求命令,这些命令被称为HTTP 方法(HTTP method

4、状态码

每条HTTP 响应报文返回时都会携带一个状态码。状态码是一个三位数字的代码,

告知客户端请求是否成功,或者是否需要采取其他动作。

200 OK。文档正确返回

302 Redirect(重定向)。到其他地方去获取资源

404 Not Found(没找到)。无法找到这个资源

注:伴随着每个数字状态码,HTTP 还会发送一条解释性的“原因短语”文本(参见图

1-5 中的响应报文)。包含文本短语主要是为了进行描述,所有的处理过程使用的都

是数字码。

5HTTP报文

HTTP 报文包括以下三个部分。

起始行

报文的第一行就是起始行,在请求报文中用来说明要做些什么,在响应报文中说

明出现了什么情况。

首部字段

起始行后面有零个或多个首部字段。每个首部字段都包含一个名字和一个值,为

了便于解析,两者之间用冒号(:)来分隔。首部以一个空行结束。添加一个首

部字段和添加新行一样简单。

主体

空行之后就是可选的报文主体了,其中包含了所有类型的数据。请求主体中包括

了要发送给Web 服务器的数据;响应主体中装载了要返回给客户端的数据。起

始行和首部都是文本形式且都是结构化的,而主体则不同,主体中可以包含任意

的二进制数据(比如图片、视频、音轨、软件程序)。当然,主体中也可以包含

文本。

浏览器发送了一条HTTP 请求报文。这条请求的起始行中有一个GET

命令,且本地资源为/tools.html。这条请求说明它使用的是1.0 版的HTTP 协议。请

求报文没有主体,因为从服务器上GET 一个简单的文档不需要请求数据。

服务器会回送一条HTTP 响应报文。这条响应中包含了HTTP 的版本号(HTTP/1.0)、

一个成功状态码(200)、一个描述性的原因短语(OK),以及一块响应首部字

段,在所有这些内容之后跟着包含了所请求文档的响应主体。Content-Length

首部说明了响应主体的长度,Content-Type 首部说明了文档的MIME 类型。

6url转码

这种转义表示法包含一个百分号(%),后面跟着两个表示字符ASCII 码的十六进制数。

最适合判断是否需要对字符进行编码的程序就是从用户处获取URL 的源端应用程

序。URL 的每个组件都会有自己的安全/ 不安全字符,哪些字符是安全/ 不安全的

与方案有关,因此只有从用户那里接收URL 的应用程序才能够判断需要对哪些字符

进行编码。

7url组件

大多数URL 方案的URL 语法都建立在这个由9 部分构成的通用格式上:

<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>

8、状态码分类

使用HEAD,可以:

在不获取资源的情况下了解资源的情况(比如,判断其类型);

通过查看响应中的状态码,看看某个对象是否存在;

通过查看首部,测试资源是否被修改了。

9、HTTP和HTTPS网络协议栈

10、缓存过期日期

服务器用HTTP/1.0+ 的Expires 首部或HTTP/1.1 的Cache-Control: max-age 响应首

部来指定过期日期,同时还会带有响应主体。Expires 首部和Cache-Control:

max-age 首部所做的事情本质上是一样的,但由于Cache-Control 首部使用的是

相对时间而不是绝对日期,所以我们更倾向于使用比较新的Cache-Control 首部。

绝对日期依赖于计算机时钟的正确设置。

11、robots.txt

12、主体编码

Accept-Encoding 字段包含用逗号分隔的支持编码的列表,下面是一些例子:

Accept-Encoding: compress, gzip

Accept-Encoding:

Accept-Encoding: *

Accept-Encoding: compress;q=0.5, gzip;q=1.0

Accept-Encoding: gzip;q=1.0, identity; q=0.5, *;q=0

客户端可以给每种编码附带Q(质量)值参数来说明编码的优先级。Q 值的范围从

0.0 到1.0,0.0 说明客户端不想接受所说明的编码,1.0 则表明最希望使用的编码。

“*”表示“任何其他方法”。

内容编码是和内容的具体格式细节紧密相关的。例如,你可能会用gzip 压缩文本文件,但不是JPEG 文件,因为JPEG 这类东西用gzip 压缩的不够好。

分块编码是一种传输编码(传输编码包括分块编码),使用传输编码是为了改变报文中的数据在网络上传输的方式。

13、验证码分为强验证码和弱验证码

强:Etag(md5只要内容变了,不管大小是否改变,校验和都会改变;b版本号)

弱:大小(内容变了可能大小没变)

时间(修改时间只能精确到1秒,WEB同时处理很多请求,可以1秒内多次改变)

注:如果客户端在请求时想使用弱验证,首部值添加一个W/,如:W/"v3.0"

14、差异编码

A-IM 是Accept-Instance-Manipulation(接受实例操控)的缩写。

15、字符集 字符集是把字符转换为二进制码的编码

HTTP 字符集的值说明如何把实体内容的二进制码转换为特定字母表中的字符(反之亦然)

字符集不对,字符就不对

语言标记有一个或多个部分,用连字号分隔,称为子标记:

第一个子标记称为主子标记,其值是标准化的;

第二个子标记是可选的,遵循它自己的命名标准;

其他尾随的子标记都是未注册的。

标记的大小写问题:

所有的标记都是不区分大小写的,也就是说,标记en 和eN 是等价的。但是,习惯

上用全小写来表示一般的语言,而用全大写来表示特定的国家。例如,fr 表示所有

分类为法语的语言,而FR 表示国家法国19。

17、URI

需要注意的是,要转义的值本身应该在US-ASCII 代码值的范围内(0 ~ 127)。

例如,文件名Sven lssen.html(包含了一个元音变音)可能被网站服务器编码为

Sven%20%D6lssen.html。把空格编码为%20 是对的,但从技术上说,把 编码为

%D6 是非法的,因为代码D6 (十进制值214)落在了ASCII 代码范围之外。ASCII

只定义了最大值为0x7F(十进制值127)的代码。

18、内容协商

由于缓存需要尽力提供所缓存文档中正确的“最佳”版本,HTTP 协议定义了服务器

在响应中发送的Vary 首部。这个首部告知缓存(还有客户端和所有下游的代理)服

务器根据哪些首部来决定发送响应的最佳版本。

apache用以下两种方式可以启用内容协商。

在网站目录中,为网站中每个有变体的URI 创 建一个 type-map(类型映射)文件。

这个type-map 文件列出了每个变体和其相关的内容协商首部集。

启用 MultiViews 指令,这样会使 Apache 自动为目录创建 type-map 文件。

这里给出一个type-map 文件示例:

URI: joes-hardware.html

URI: joes-hardware.en.html

Content-type: text/html

Content-language: en

URI: joes-hardware.fr.de.html

Content-type: text/html;charset=iso-8859-2

Content-language: fr, de

根据这个type-map 文件,Apache 服务器就知道要发送joes-hardware.en.html 给请求

英语版的客户端,发送joes-hardware.fr.de.html 给请求法语版的客户端。Apache 服

务器也支持质量值,具体信息请参阅它相关文档。

19、转码

有3 种类别的转码:格式转换、信息综合以及内容注入。

20、主机 托管

对内容资源的存储、协调以及管理的职责统称为Web 主机托管。

21、重定向