文档章节

【原创】HTTP 协议中的 chunked 编码

摩云飞
 摩云飞
发布于 2014/07/30 11:20
字数 633
阅读 179
收藏 1

在 HTTP/1.1 协议中增加了如下关于 chunk 的内容:
Faster response for dynamically-generated pages, by supporting chunked encoding, which allows a response to be sent before its total length is known.

对于支持 HTTP/1.1 协议的客户端,要求能够处理以 chunked 形式组织的 response ,具体如下:

【Chunked Transfer-Encoding】

      如果服务器想要在不知道 response 总体长度的情况下进行应答(就像使 long script output 那样),其需要使用简单的 chunked transfer-encoding 方式,即将完整的 response 拆分成更小的 chunk 后连续发送。你可以很容易辨认出这种类型的 response ,因为其包含了 Transfer-Encoding: chunked 头。所有支持 HTTP/1.1 协议的客户端都必须能够接收并处理 chunked 消息。

一条 chunked 消息由一组 chunk 构成,随后是由 "0" 构成的行,然后是多个可选的 footer ,最后是空行。每一块 chunk 有两部分构成:
  • 用于表示 chunk 数据长度的、以十六进制表示的、独占一行的数值。其后可能还有可以忽略的分号和额外参数(目前这些内容都未成为标准),以及结束标志 CRLF 。
  • 数据本身,以 CRLF 结尾。

上述 chunked response 样子如下:
HTTP/1.1 200 OK
Date: Fri, 31 Dec 1999 23:59:59 GMT
Content-Type: text/plain
Transfer-Encoding: chunked

1a; ignore-stuff-here
abcdefghijklmnopqrstuvwxyz
10
1234567890abcdef
0
some-footer: some-value
another-footer: another-value
[blank line here]

      需要注意的是,最后一个 footer 后面还需要有空行。当前文本数据的长度是 42 个字节(十六机制 1a + 10),而数据本身为 abcdefghijklmnopqrstuvwxyz1234567890abcdef 。而 footer 要以 header 来看待,就好像它们是直接被放在 response 头部一样。

      chunk 数据可以包含任意二进制数据,并且很可能包含了很大的数据。表明 chunk 长度的 size 值很好被直接使用,但你需要确保程序中正确的忽略掉它们。footer 也很少被使用,但是它们会被用于 checksum 或数字签名的场景中。

作为对比,下面提供了一个等价于上面 response 的另一个例子,但是没有采用 chunked 编码形式:
HTTP/1.1 200 OK
Date: Fri, 31 Dec 1999 23:59:59 GMT
Content-Type: text/plain
Content-Length: 42
some-footer: some-value
another-footer: another-value

abcdefghijklmnopqrstuvwxyz1234567890abcdef
而对于支持 HTTP/1.1 协议的服务器,同样需要能够接受以 chunked 数据格式发送来的 request 。
Just as HTTP 1.1 clients must accept chunked responses, servers must accept chunked requests (an unlikely scenario, but possible). Servers aren't required to generate chunked messages; they just have to be able to receive them.


© 著作权归作者所有

共有 人打赏支持
摩云飞
粉丝 371
博文 534
码字总数 952694
作品 0
徐汇
程序员
私信 提问
http协议content-encoding & transfer-encoding

HTTP 1.1中有两个实体头(Entity-Header)直接与编码相关,分别为Content-Encoding和Transfer-Encoding. 先说Content-Encoding, 该头表示实体已经采用了的编码方式.Content-Encoding是请求URL对...

adamsun
2013/01/14
0
0
取消掉Transfer-Encoding:chunked

有时候,Web服务器生成HTTP Response是无法在Header就确定消息大小的,这时一般来说服务器将不会提供Content-Length的头信息,而采用Chunked编码动态的提供body内容的长度。 进行Chunked编码...

晨曦之光
2012/03/09
7.4K
0
HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP

题图:by @Olga Hi,大家好,我是承香墨影! HTTP 协议在网络知识中占据了重要的地位,HTTP 协议最基础的就是请求和响应的报文,而报文又是由报文头(Header)和实体组成。大多数 HTTP 协议的...

承香墨影
2018/10/29
0
0
HTTP协议之Chunked解析

在网上找了好一会,始终没发现有解析Chunked编码的文章,那就自己写一个吧,呵呵。 网上使用Chunked编码的网站似乎并不是很多,除了那些使用GZip压缩的网站,例:google.com,还有就是大部分...

晨曦之光
2012/03/09
562
0
关于部分图片有时报ERR_CONTENT_LENGTH_MISMATCH问题

http协议中content-length 以及chunked编码分析 感觉是oss上图片用了chunked编码模式,然而由于网络问题,分块传送没有完成,报了这个错误。目前还没有验证这个问题。...

varvelworld
2015/05/20
2
0

没有更多内容

加载失败,请刷新页面

加载更多

grafana安装使用及与zabbix集成

grafana简介 Grafana是一个完全开源的度量分析与可视化平台,可对来自各种各种数据源的数据进行查询、分析、可视化处理以及配置告警。 Grafana支持的数据源: 官方:Graphite,InfluxDB,Ope...

阿dai学长
33分钟前
6
0
带你看数据挖掘与机器学习-厦大EDP上课出勤预测

带你看数据挖掘与机器学习-厦大EDP上课出勤预测 标签: 数据挖掘 特征工程 机器学习 出勤预测 write by xmhexi 2019/3/22 内容提要 首先说明本文是一篇科普文章,通过一个实际案例,帮助理解什...

xmhexi
今天
85
0
IOS  学习记录

1.StackView=>IOS 9及以上支持 2.布局方式: AutoLayout / StackView 堆布局 (线性布局) 3.屏幕适配 (资源分辨率、设计分辨率、屏幕分辨率) Size Class技术 可以针对 屏幕的方向进行设置...

萨x姆
今天
5
0
第四次工业革命:自主经济的崛起

https://36kr.com/p/5170370.html

shengjuntu
昨天
5
0
Cloud Native 与12-Factor

12-Factor(twelve-factor),也称为“十二要素”,是一套流行的应用程序开发原则。Cloud Native架构中使用12-Factor作为设计准则。 12-Factor 的目标在于: 使用标准化流程自动配置,从而使...

waylau
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部