http协议content-encoding & transfer-encoding
来源:互联网 发布:matlab 矩阵怎么转置 编辑:程序博客网 时间:2024/06/05 08:30
转载:http://www.51testing.com/?uid-390472-action-viewspace-itemid-233985
HTTP 1.1中有两个实体头(Entity-Header)直接与编码相关,分别为Content-Encoding和Transfer-Encoding.
先说Content-Encoding, 该头表示实体已经采用了的编码方式.Content-Encoding是请求URL对应实体(Entity)本身的一部分.比如请求URL为 http://host/image.png.gz时,可能会得到的Content-Encoding为gzip.Content-Encoding的值是不区分大小写的,目前HTTP1.1标准中已包括的有gzip/compress/deflate/identity等.
与Content-Encoding头对应,HTTP请求中包含了一个Accept-Encoding头,该头用来说明用户代理(User- Agent,一般也就是浏览器)能接受哪些类型的编码. 如果HTTP请求中不存在该头,服务器可以认为用户代理能接受任何编码类型.
接下来重点描述Transfer-Encoding, 该头表示为了达到安全传输或者数据压缩等目的而对实体进行的编码. Transfer-Encoding与Content-Encoding的不同之处在于:
1, Transfer-Encoding只是在传输过程中才有的,并非请求URL对应实体的本身特性.
2, Transfer-Encoding是一个"跳到跳"头,而Content-Encoding是"端到端"头.
该头的用途举例如,请求URL为http://host/abc.txt,服务器发送数据时认为该文件可用gzip方式压缩以节省带宽,接收端看到Transfer-Encoding为gzip首先进行解码然后才能得到请求实体.
此外多个编码可能同时对同一实体使用,所以Transfer-Encoding头中编码顺序相当重要,它代表了解码的顺序过程.同样,Transfer- Encoding的值也是不区分大小写的,目前HTTP1.1标准中已包括的有gzip/compress/deflate/identity /chunked等.
Transfer-Encoding中有一类特定编码:chunked编码.该编码将实体分块传送并逐块标明长度,直到长度为0块表示传输结束, 这在实体长度未知时特别有用(比如由数据库动态产生的数据). HTTP1.1标准规定,只要使用了Transfer-Encoding的地方就必须使用chunked编码,并且chunked必须为最后一层编码.任何HTTP 1.1应用都必须能处理chunked编码.
与Transfer-Encoding对应的请求头为TE,它主要表示请求发起者愿意接收的Transfer-Encoding类型. 如果TE为空或者不存在,则表示唯一能接受的类型为chunked.
其他与Transfer-Encoding相关的头还包括Trailer,它与chunked编码相关,就不细述了.
顾名思义,Content-Length表示传输的实体长度,以字节为单位(在请求方法为HEAD时表示会要发送的长度,但并不实际发送.).Content-Length受Transfer-Encoding影响很大,只要Transfer-Encoding不为identity,则实际传输长度由编码中的chunked决定,Content-Length即使存在也被忽略.
关于HTTP Message Body的长度
在HTTP中有消息体(Message body)和实体(Entity body)之分,简单说来在没有Transfer-Encoding作用时,消息体就是实体,而应用了Transfer-Encoding后,消息体就是编码后的实体,如下:
Message body = Transfer-Encoding encode(Entity body)
如何确定消息体的长度? HTTP 1.1标准给出了如下方法(按照优先级依次排列):
1, 响应状态(Response Status)为1xx/204/304或者请求方法为HEAD时,消息体长度为0.
2, 如果使用了非"identity"的Transfer-Encoding编码方式,则消息体长度由"chunked"编码决定,除非该消息以连接关闭为结束.
3, 如果存在"Content-Length"实体头,则消息长度为该数值.
3, 如果消息使用关闭连接方式代表消息体结束,则长度由关闭前收到的长度决定. 该条对HTTP Request包含的消息体不适用.
- http协议content-encoding & transfer-encoding
- http协议content-encoding & transfer-encoding
- http协议content-encoding & transfer-encoding
- HTTP协议首部字段transfer-encoding与content-length差异
- http协议Chunked transfer encoding
- HTTP 协议中的 Transfer-Encoding
- HTTP 协议中的 Transfer-Encoding
- http协议之Transfer-Encoding
- HTTP 协议中的 Transfer-Encoding
- HTTP 协议中的 Transfer-Encoding
- HTTP 协议中的 Transfer-Encoding
- HTTP 协议中的 Transfer-Encoding
- HTTP 协议中的 Transfer-Encoding
- HTTP 协议中的 Transfer-Encoding
- HTTP 协议中的 Transfer-Encoding
- HTTP 协议中的 Transfer-Encoding
- Content-Encoding和Transfer-Encoding
- transfer-encoding和content-encoding
- substr,substrb函数剖析
- 一个页面多次调用自定义控件时,注册JS脚本
- avoid pop-up Program Compatibility Assistant (PCA) dialog
- Win7上Android开发环境搭建
- jquery 插件(三) 精选动画仿flash插件1
- http协议content-encoding & transfer-encoding
- Android学习之 Platform总线 2
- 从HelloWorld看iphone程序的生命周期
- Http协议中消息的编码
- Workflow异常
- oracle: job简单示例
- ADO.NET中的事务
- 利用lipo编译合并iPhone模拟器和真机通用的静态类库
- HTTP1.1和HTTP1.0的区别