15. 实体和编码
文章平均质量分 63
gzf6
这个作者很懒,什么都没留下…
展开
-
15.1 报文与实体
HTTP 要确保它所承载的“货物”满足以下条件: 可以被正确地识别(通过 Content-Type 首部说明媒体格式,Content- Language 首部说明语言),以便浏览器和其他客户端能正确处理内容;可以被正确地解包(通过 Content-Length 首部和 Content-Encoding 首部);是最新的(通过实体验证码和缓存过期控制);符合用户的需要(基于 Accept 系列原创 2017-10-30 15:16:36 · 2211 阅读 · 0 评论 -
15.9 范围请求
HTTP 允许客户端实际上只请求文档的一部分,或者说某个范围。假设你正通过慢速的调制解调器连接下载最新的热门软件,已经下了四分之三,忽然因为一个网络故障,连接中断了。你已经为等待下载完成耽误了很久,而现在被迫要全部重头再来。有了范围请求,HTTP 客户端可以通过请求曾获取失败的实体的一个范围(或者说一部分),来恢复下载该实体。当然这有一个前提,那就是从客户端上一次请求该实体到这次发出范围请求的时原创 2017-10-30 15:24:57 · 252 阅读 · 0 评论 -
15.8 验证码和新鲜度
当文档在客户端“过期”之后(也就是说,客户端不再认为该副本有效),客户端必须从服务器请求一份新的副本。不过,如果该文档在服务器上并未发生改变,客户端也就不需要再接收一次了——继续使用缓存的副本即可。这种特殊的请求,称为有条件的请求(conditional request),要求客户端使用验证码(validator)来告知服务器它当前拥有的版本号,并仅当它的当前副本不再有效时才要求发送新的副本。1原创 2017-10-30 15:24:16 · 273 阅读 · 0 评论 -
15.7 随时间变化的实例
网站对象并不是静态的。同样的 URL 会随着时间变化而指向对象的不同版本。实例就是资源在某个时间的“快照”。比如,可以把 CNN 的主页当作一个对象来考虑,其不同版本就可以看作这个对象的不同实例(见下图)。在图中,客户端多次请求同一个资源(URL),但得到的是该资源的不同实例,因为它是随时间而变化的。在时间(a)和时间(b)具有相同的实例,而在时间(c)则是不同的实例。 HTTP 协议规定了称为实原创 2017-10-30 15:23:45 · 516 阅读 · 0 评论 -
15.6 传输编码和分块编码
前一节讨论的内容编码,是对报文的主体进行的可逆变换。内容编码是和内容的具体格式细节紧密相关的。例如,你可能会用 gzip 压缩文本文件,但不是 JPEG 文件,因为 JPEG 这类东西用 gzip 压缩的不够好。本节讨论传输编码。传输编码也是作用在实体主体上的可逆变换,但使用它们是由于架构方面的原因,同内容的格式无关。使用传输编码是为了改变报文中的数据在网络上传输的方式。 1. 可靠传输长久以来原创 2017-10-30 15:22:51 · 623 阅读 · 0 评论 -
15.5 Content-Encoding:内容编码
HTTP 应用程序有时在发送之前需要对内容进行编码。常见的比如服务器利用 gzip 进行压缩,减少传输实体的时间。1. 内容编码过程内容编码的过程: 网站服务器生成原始响应报文,其中有原始的 Content-Type 和 Content- Length 首部。内容编码服务器(也可能就是原始的服务器或下行的代理)创建编码后的报文。编码后的报文有同样的 Content-Type 但 Conten原创 2017-10-30 15:21:16 · 1347 阅读 · 0 评论 -
15.4 Content-Type:MIME 类型和字符集
Content-Type 首部字段说明了实体主体的 MIME 类型。(在HEAD请求中,Content-Type 说明如果请求是GET时,将要发送的主体的类型。)MIME 介绍见1.2.1 Web 资源——媒体类型(MIME)。注意:Content-Type 首部说明的是原始实体主体的媒体类型。如果实体经过内容编码的话,Content-Type 首部说明的仍是编码之前的实体主体的类型。Cont原创 2017-10-30 15:19:52 · 720 阅读 · 0 评论 -
15.3 Content-MD5:实体校验
尽管 HTTP 通常都是在像 TCP/IP 这样的可靠传输协议之上实现的,但仍有很多因素会导致报文的一部分在传输过程中被修改,比如有不兼容的转码代理,或者中间代理有误,等等。为检测实体主体的数据是否被不经意(或不希望有)地修改,发送方可以在生成初始的主体时,生成一个数据的校验和,这样接收方就可以通过检查这个校验和来捕获所有意外的实体修改了。当然,这种方法对同时替换报文主体和摘要首部的恶意攻击无效。原创 2017-10-30 15:17:58 · 2578 阅读 · 1 评论 -
15.2 Content-Length 实体的大小
Content-Length 首部指示出报文中实体主体的字节大小。这个大小是包含了所有内容编码的,比如,对文本文件进行了 gzip 压缩的话,Content-Length 首部就是压缩后的大小,而不是原始大小。除非使用了分块编码,否则 Content-Length 首部就是带有实体主体的报文必须使用的。使用 Content-Length 首部是为了能够检测出服务器崩溃而导致的报文截尾,并对共享持原创 2017-10-30 15:17:09 · 2999 阅读 · 0 评论 -
15.10 差异编码
差异编码是 HTTP 协议的一个扩展,它通过交换对象改变的部分而不是完整的对象来优化传输性能。差异编码也是一类实例操控,因为它依赖客户端和服务器之间针对特定的对象实例来交换信息。RFC 3229 描述了差异编码。下图展示了差异编码的结构,包括请求、生成、接收和装配文档的全过程: 客户端必须告诉服务器它有页面的哪个版本,它愿意接受页面最新版的差异(delta),它懂得哪些将差异应用于现有版本的算法原创 2017-10-30 15:26:16 · 419 阅读 · 0 评论