90.http权威指南-第14章-实体和编码
2022-04-11 本文已影响0人
wo不是黄蓉
content-length:
- 用来表示实体的大小,如果设置了gzip就是压缩后的大小;
- 用来检测截尾,客户端区分报文结束和正常的连接关闭,还是报文传输中由于服务器崩溃而导致的连接关闭;
- 持久连接,http应用程序不知道某个实体主体在哪里结束,下一条报文从哪里开始;
content-length内容编码,确定实体主体长度的规则:
- 指定不允许带主体的报文类型不允许带主体,忽略content-length首部。如果head发送和get等价的请求并且不带主体时,会出现
content-length
首部,这时表示的是首部提示性的,不表示实际的主体长度。
因为get响应会带有content-length
,但是Head响应中没有主体。 - 报文中含有描述传输编码的
transfer-encoding
首部,实体就应由一个称为“零字节块”的特殊模式结束,除非保卫呢已经因连接关闭而结束。 - 如果报文中有
content-length
而且没有非恒等的transfer-encoding
首部字段,content-length的值就是主体的长度;报文中既有content-length
又有transfer-encoding
就忽略content-length
。因为传输编码会改变主体的长度。 - 如果报文使用了
multipart/byteranges
媒体类型,且没有用content-length
,多不部分报文中的每个部分都要说明它自己的大小。 - 如果上面规则都不匹配,实体就在连接关闭时结束。服务器可以使用连接关闭来表示报文结束。客户端不能用关闭连接来指示客户端报文结束,这样服务端就无法发回响应。
实体摘要
为了保证实体数据不被修改,发送方在生成初始主体时,生成一个数据的校验和,这样接收方就能通过检查校验和来查看实体是否被修改了。
服务器使用content-MD5
首部发送对实体主体运行MD5算法的结果。
content-MD5
对首部实体编码之后,还没传输编码之前,计算出来的。
客户端必须先进行传输编码的解码,然后计算所得到的未进行传输编码的实体主体的MD5。
媒体类型和字符集
content-type
客户端使用MIME类型来解释和处理实体内容。
字符编码:charset
多部份媒体类型:multipart
- 多部分表格提交:
multipart/form-data
-
boundary
说明了分割主体中的不同部分所有的字符串 -
byteranges
首部和带有不同范围的多部分主体
内容编码
content-encoding
接收应用程序使用指定的编码格式解码。
Accept-encoding
服务器用客户端指定的方式来对内容进行编码。
identity
只在Accept-encoding
首部中出现,客户端用它来说明相对于其他内容编码算法的优先级。
传输变么和分块编码
作用在实体上的,和内容的编码格式无关,为了改变报文中数据在网络上的传输方式。
- 可靠传输
- 未知尺寸:使用
content-length
首部 - 安全性:SSL
- 未知尺寸:使用
2022.4.12更新
验证码和新鲜度
有条件的请求:文档再客户端“过期”之后,客户端必须从服务器请求一份新的副本,没有过期继续使用缓存副本。
要求客户端使用验证码来告知服务器它当前拥有的版本号,只有当副本不再有效时才要求发送新的副本。
新鲜度
expires和cache-control(缓存控制)
expires需要保证客户端和服务端的时间是一致的。
cache-control
使用相对时间进行定义。