《HTTP 权威指南》笔记:第十五章 实体与编码

如果把 「HTTP 报文」想象为因特网货运系统的「箱子」,那么「HTTP 实体」就是报文中的实际的「货物」.

其中,实体又包含了「实体首部」 和 「实体主体」,实体首部用于描述各种参数,实体主体时原始货物.

常见的实体首部

实体的大小: Content-Length

定义:

报文的字节的数量

功能:

HTTP 的早期版本用 Content-Length.来判断是否关闭连接,进而判断报文结束.
注意:

  1. 持久连接必须有 Content-Length ,因为连接是持久的,因此客户端无法依赖连接关闭来判别报文的结束.
  2. 经过内容编码之后,说明的是编码之后的报文主体的长度.

实体摘要: Content-MD5

定义:对报文主体进行 MD5 算法得到的结果
功能:防止报文被篡改

媒体类型: Content-Type

定义:主体的 MIME 类型
注意:经过内容编码之后, Content-type 首部说明的仍是编码之前实体主体的类型.

一种Content-type:multipart

定义:报文中存在多个报文,合成一个复杂的报文发送
功能:支持多部分主体,常常用于填写表格

内容编码: Content-Encoding

定义:为了达到减少传输时间的目的,对主体内容进行压缩.

类型:

内容编码的类型是 Content-Encoding 的值,有下面几种:

  1. gzip
  2. compress
  3. deflate
  4. identity(没有编码,当没有 Content-Encoding 时的值)

传输编码: Transfer-Encoding

定义

与内容编码仅仅把报文主体内容编码不同, 传输编码将整个报文进行编码.

分块编码

定义:将报文分割为大小已知的块,块与块紧挨着发送.
格式:以长度值为 0 的块代表主体结束.
特点:不需要知道 Content-length(在主体是动态创建的情况下很实用)

实例操控 instance manipulations

定义:在不同的时间下,一个对象可能有不同的版本.要求客户端能够标示它所拥有的资源的副本,并且在一定的条件下请求实例.
主要有两种办法进行实体操控:

  1. 范围请求
  2. 差异编码

范围请求:Accept-Ranges

定义:

允许客户端在副本不再有效的情况下,不请求完整副本,只请求文档的一个范围

应用:

下载中断的文件在重新下载时不需要重头开始下载.

差异编码:A-IM

定义:

当页面的内容发生变化的时候,即使改动的内容很少,也要重新请求.
差异编码指的是客户端愿意服务器只发送改变的部分,以更快地得到更新的页面.

A-IM 这个 header

A-IM: 是 Accept Instance Manipulation 的缩写,其功能相当于:

客户端说:“哦,对了,我能接受某些形式的实例操控,如果你会其中的一种的话,就不用发完整的文档给我了.”

缺陷

如果一个网页更新比较频繁,服务器为了能够更快地进行差异计算,于是需要把各个版本的文档储存在服务器上,导致硬盘的空间减少.





猜你喜欢

转载自www.cnblogs.com/FBsharl/p/10662670.html