HTTP作为现在非常重要的协议,需要仔细梳理一下。本次学习知识点来自于《HTTP权威指南》,只是文中知识点罗列,算是读书笔记,请有兴趣的读者购买《HTTP权威指南》完整阅读
一、实体
每天都有数以亿计的各种媒体对象经由 HTTP 传送, 如图像、 文本、 影片以及软件程序等。 只要你能叫出名字, HTTP 就可以传送。 HTTP 还会确保它的报文被正确传送、 识别、 提取以及适当处理。 具体说来, HTTP 要确保它所承载的“货物” 满足以下条件。
• 可 以 被 正 确 地 识 别(通 过 Content-Type 首 部 说 明 媒 体 格 式, ContentLanguage 首部说明语言), 以便浏览器和其他客户端能正确处理内容。
• 可以被正确地解包(通过 Content-Length 首部和 Content-Encoding 首部)。
• 是最新的(通过实体验证码和缓存过期控制)
• 符合用户的需要(基于 Accept 系列的内容协商首部)
• 在网络上可以快速有效地传输(通过范围请求、 差异编码以及其他数据压缩方法)
• 完整到达、 未被篡改(通过传输编码首部和 Content-MD5 校验和首部)
1、报文是箱子, 实体是货物
HTTP 实体首部(参见第 3 章) 描述了 HTTP 报文的内容。 HTTP/1.1 版定义了以下10 个基本字体首部字段。
• Content-Type
实体中所承载对象的类型。
• Content-Length
所传送实体主体的长度或大小。
• Content-Language
与所传送对象最相配的人类语言。
• Content-Encoding
对象数据所做的任意变换(比如, 压缩)。
• Content-Location
一个备用位置, 请求时可通过它获得对象。
• Content-Range
如果这是部分实体, 这个首部说明它是整体的哪个部分。
• Content-MD5
实体主体内容的校验和
• Last-Modified
所传输内容在服务器上创建或最后修改的日期时间。
• Expires
实体数据将要失效的日期时间。
• Allow
该资源所允许的各种请求方法, 例如, GET 和 HEAD。
• ETag
这份文档特定实例(参见 15.7 节) 的唯一验证码。 ETag 首部没有正式定义为实体首部, 但它对许多涉及实体的操作来说, 都是一个重要的首部。
• Cache-Control
指出应该如何缓存该文档。 和 ETag 首部类似, Cache-Control 首部也没有正式定义为实体首部。
2、Transfer-Encoding首部
HTTP 协议中只定义了下面两个首部来描述和控制传输编码。
• Transfer-Encoding
告知接收方为了可靠地传输报文, 已经对其进行了何种编码。
• TE
用在请求首部中, 告知服务器可以使用哪些传输编码扩展。
3、新鲜度
服务器应当告知客户端能够将内容缓存多长时间, 在这个时间之内就是新鲜的。服务器可以用这两个首部之一来提供这种信息: Expires(过期) 和 CacheControl(缓存控制)。Expires 首部规定文档“过期” 的具体时间——此后就不应当认为它还是最新的。Expires 首部的语法如下:
Expires: Sun Mar 18 23:59:59 GMT 2001
4、验证码
HTTP 把验证码分为两类: 弱验证码(weak validators) 和强验证码(strong validators)。弱验证码不一定能唯一标识资源的一个实例, 而强验证码必须如此。 弱验证码的一个例子是对象的大小字节数。 有可能资源的内容改变了, 而大小还保持不变, 因此假想的字节计数验证码与改变是弱相关的。 而资源内容的加密校验和(比如 MD5)就是强验证码, 当文档改变时它总是会改变。
同时, 客户端需要告知服务器用户理解何种语言, 浏览器上安装了何种字母表编码算法。 客户端发送 Accept-Charset 首部和 Accept-Language 首部, 告知服务器它理解哪些字符集编码算法和语言以及其中的优先顺序。
Content-Type: text/html; charset=iso-8859-6
• 字符
字符是指字母、 数字、 标点、 表意文字(比如汉语)、 符号, 或其他文本形式的
书写“原子”。 由统一字符集(Universal Character Set, UCS, 它的非正式的名字
是 Unicode3) 首创, 为多种语言中的很多字符开发了一系列标准化的文本名称,
它们常用来便捷地命名字符, 而且不会与其他字符冲突。 4
• 字形
描述字符的笔画图案或唯一的图形化形状。 如果一个字符有多种不同的写法, 就有多个字形(参见图 16-3)。
• 编码后的字符
分配给字符的唯一数字编号, 这样我们就可以操作它了。
• 代码空间
计划用于字符代码值的整数范围。
• 代码宽度
每个(固定大小的) 字符代码所用的位数。
• 字符库
特定的工作字符集(全体字符的一个子集)
• 编码后的字符集
组成字符库(从全球的字符中选出若干字符) 的已编码字符集, 并为每个字符分配代码空间中的一个代码。 换句话说, 它把数字化的字符代码映射为实际的
字符。
• 字符编码方案
把数字化的字符代码编码成一系列二进制码(并能相应地反向解码) 的算法。 字符编码方案可用来减少识别字符所需要的数据总量(压缩)、 解决传输限制、 统
一重叠编码字符集
4、内容分发网络
1、重定向