码迷,mamicode.com
首页 > Web开发 > 详细

http 实体首部

时间:2015-10-22 12:27:40      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:

http 实体首部

http 实体首部

Content-Type               类型
Content-Length             长度
Content-Encoding           编码方式
Content-Language           最相配的人类语言
Content-Location           备用位置, 请求时通过他可以获得对象
Content-Range              部分实体, 说明他是整体的哪个部分
Content-MD5                实体主体内容的 md5 校验和
Last-Modified              Server 上最后的修改日期时间
Expires                    将要失效的日期
Allow                      Server 允许的方法
ETag                       文档的唯一验证码
Cache-Control              如何缓存该文档

Encoding

gzip
deflate
compress
identity   不使用编码
client 没有指定 Accept-Encoding 相当于指定 Accept-Encoding: * (允许任何编码方式)
server 的响应首部是 content-encoding

优先级

Accept-Encoding: compress;q=1.0, identity;q=0.5, *;q=0
优先级级别 1.0 最高

控制传输编码

Transfer-Encoding: 响应首部, 告知 Client 为了可靠地传输报文, 已经进行了什么编码
TE: 请求首部, 告知 Server 可以使用哪些传输编码扩展 (可以理解 Accept-Transfer-Encoding)

分块编码

chunked encoding, 没有 content-length
不是持久连接的时候: Client 不需要知道 Server 发送的报文长度, 只要读到服务器关闭主机连接为止
持久连接的时候: Client 需要知道 Server 发送的报文长度 Content-Length

为了解决持久连接需要 Content-Length 的问题, 就有了分块传输. 以大小为 0 的块作为主体表示结束

HTTP/1.1 200 OK<CR><LF>
Content-type: text/plain<CR><LF>
Transfer-encoding: chunked<CR><LF>        <== 分块编码
Trailer: Content-MD5<CR><LF>              <== 见下面
27<CR><LF>
.................                         <== 27 个字符
5<CR><LF>
......                                    <== 5 个字符
0<CR><LF>                                 <== 传输结束
Content-MD5: xxxxxxxxx                    <== 仅当首部中有 Trailer 首部才出现

Trailer 首部: 列出了跟在分块报文之后的首部列表 (部分应用程序可能不理解这个首部)
Trailer 不能包括 Transfer-Encoding, Content-Length, Trailer

范围

请求首部
必须包含 Range 头信息来指示客户端希望得到的内容范围, 并且可能包含 If-Range 来作为请求条件

Range: bytes=5001-10000                  从 5001 到 10000
Range: bytes=5001-                       从 5001 到之后
Range: bytes=-3000, 5000-7000            从一开始到 3000 字节 和 5000-7000

用处: 断线重启, 多线程下载文件

响应首部:
Content-Range 用以指示本次响应中返回的内容的范围, 表示方法和 Range 一样
如果是 Content-Type 为 multipart/byteranges 的 多段下载,
则每一 multipart 段中都应包含 Content-Range 域用以指示本段的内容范围
假如响应中包含 Content-Length, 那么它的数值必须匹配它返回的内容范围的真实字节数

GET /bigfile.html HTTP/1.1
Range: bytes=20224-

HTTP/1.1 206 partial
Content-Range: bytes=20224-
Accept-ranges: bytes

差异编码

Client 接收 Server 端页面发生改变的部分而不是全部
A-IM 首部, Accept-Instance-Manipulation (接受实例操控)
如果成功, Server 端会响应一个特殊的头部 – 226 IM Used 告诉客户端它正在发送的是所请求对象的实例操控

GET /bigfile.html HTTP/1.1
If-None-Match: xxxxxxx1            <== Etag
A-IM: diffe

HTTP/1.1 226 IM Used
IM: diffe
Etag: xxxxxxx2                     <== 新的 Etag
Delta-base: xxxxxxx1               <== 原先的 Etag

IM 的算法类型

vcdiff
diffe          <== Unix diff-e 命令
gdiff
gzip           <== 对差异部分进行压缩, 用法如下
deflate        <== 对差异部分进行压缩, 用法如下
range          <== 表示差异部分的范围
identity

IM: vcdiff, gzip

http 实体首部

标签:

原文地址:http://www.cnblogs.com/sunznx/p/4900257.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!