15.10 差异编码
来源:互联网 发布:淘宝上中国制造的好吗 编辑:程序博客网 时间:2024/06/05 22:08
- 差异编码是 HTTP 协议的一个扩展,它通过交换对象改变的部分而不是完整的对象来优化传输性能。差异编码也是一类实例操控,因为它依赖客户端和服务器之间针对特定的对象实例来交换信息。RFC 3229 描述了差异编码。
- 下图展示了差异编码的结构,包括请求、生成、接收和装配文档的全过程:
- 客户端必须告诉服务器它有页面的哪个版本,它愿意接受页面最新版的差异(delta),它懂得哪些将差异应用于现有版本的算法。
- 服务器必须检查它是否有这个页面的客户端现有版本,计算客户端现有版本与最新版之间的差异(有若干算法可以计算两个对象之间的差异)。
- 然后服务器必须计算差异,发送给客户端,告知客户端所发送的是差异,并说明最新版页面的新标识(ETag),因为客户端将差异应用于其老版本之后就会得到这个版本。
- 客户端在 If-None-Match 首部中使用的是它所持有页面版本的唯一标识,这个标识是服务器之前响应客户端时在 ETag 首部中发送的。客户端是在对服务器说:“如果你那里页面的最新版本标识和这个 ETag 不同,就把这个页面的最新版本发给我。”如果只有 If-None-Match 首部,服务器将会把该页面的最新版本完整地发给客户端。(假设最新版和客户端持有的版本不同。)
- 如果客户端想告诉服务器它愿意接受该页面的差异,只要发送 A-IM 首部就 可以了。A-IM 是 Accept-Instance-Manipulation(接受实例操控)的缩写。形象比喻的话,客户端相当于这样说:“哦对了,我能接受某些形式的实例操控,如果你会其中一种的话,就不用发送完整的文档给我了。”在 A-IM 首部中,客户端会说明它知道哪些算法可以把差异应用于老版本而得到最新版本。服务端发送回下面这些内容:
- 一个特殊的响应代码——226 IM Used,告知客户端它正在发送的是所请求对象的实例操控,而不是那个完整的对象自身;
- 一个 IM(Instance-Manipulation 的缩写) 首部,说明用于计算差异的算法;
- 新的 ETag 首部和 Delta-Base 首部,说明用于计算差异的基线文档的ETag(理论上,它应该和客户端之前请求里的 If-None-Match 首部中的 ETag 相同)。
- 差异编码所用的首部:
- 客户端可以使用 A-IM 首部说明可以接受的一些实例操控的类型。服务器在 IM 首部 中说明使用的是何种实例操控。
- 可接受的实例操控类型:
- 上图中,服务器侧的“差异生成器”根据基线文档和该文档的最新实例,用客户端在 A-IM 首部中指明的算法计算它们之间的差异。客户端侧的“差异应用器”得到差异,将其应用于基线文档,得到文档的最新实例。
- 差异编码的规范中详细定义了 A-IM 和 IM 首部的格式。在这里,我们只要知道这些首部中可以说明多个实例操控(并可以带有相关的质量值)就够了。在返回给客户端之前,文档可以经过多种实例操控,这样可以获得最大程度的压缩。
- 差异编码可以减少传输次数,但实现起来可能比较麻烦。设想一下页面改动频繁,而且有很多不同的人都在访问的情形。支持差异编码的服务器必须保存页面随时间变化的所有不同版本,这样才能指出最新版本与所请求的客户端持有的任意版本之间的差异。要降低提交文档时的延迟时间,服务器必须增加磁盘空间来保存文档的各种旧的实例。实现差异编码所需的额外磁盘空间可能很快就会将减少传输量获得的好处抵消掉。
阅读全文
0 0
- 15.10 差异编码
- Android与webview JS 键值编码差异
- 差异
- 差异
- 差异
- windows、linux、mac操作系统间换行符的编码差异
- Python2 和 Python3 中默认编码的差异
- 为啥requests和urllib,urllib2,urllib3的URL编码行为存在这种差异?
- 文件编码错误,提交到git仓库后, 显示为二进制文件, 无法查看版本差异
- 关于php内部编码与mysql字符差异问题的研究
- 关于php内部编码与mysql字符差异问题的研究
- HR9001: 各浏览器对于字符编码别名支持的宽泛程度存在差异
- 关于PHP内部编码与mysql字符差异问题的研究
- 关于PHP内部编码与mysql字符差异问题的研究
- Python中对字符编码的理解, 以及Python2和3处理的差异
- [转载]文字编码之间的差异及产生过程——ANSI、GBK、GB2312、GB18030、UNICODE以及UTF-8
- 性能差异
- 浏览器差异
- Java
- py基础
- 人工智能是如何改变IT运维和DevOps的?
- Spring基础_在XML配置中引用JavaConfig<五>
- 【贪心+优先队列】51Nod 1053 最大M子段和 V2
- 15.10 差异编码
- Two Sum IV
- Android App 优化之消除卡顿
- virtualbox 5.2.0 ,debian9 安装超详细过程,看一次就懂
- 几道大数据面试题
- 轮训、长轮训、长连接
- [agc004f]Namori
- React Native 文件“launchPackager.command”无法执行,因为您没有正确的访问权限。
- 金蝶K3物料属性后台调整方法(自制/委外转外购)