有时候,Web服务器生成HTTP Response是无法在Header就确定消息大小的,这时一般来说服务器将不会提供Content-Length的头信息,而采用Chunked编码动态的提供body内容的长度。
进行Chunked编码传输的HTTP Response会在消息头部设置:
Transfer-Encoding: chunked
表示Content Body将用Chunked编码传输内容。
Chunked编码使用若干个Chunk串连而成,由一个标明长度为0的chunk标示结束。每个Chunk分为头部和正文两部分,头部内容指定下一段正文的字符总数(十六进制的数字)和数量单位(一般不写),正文部分就是指定长度的实际内容,两部分之间用回车换行(CRLF)隔开。在最后一个长度为0的Chunk中的内容是称为footer的内容,是一些附加的Header信息(通常可以直接忽略)。具体的Chunk编码格式如下:
Chunked-Body = *chunk
"0" CRLF
footer
CRLF
chunk = chunk-size [ chunk-ext ] CRLF
chunk-da<wbr>ta CRLF</wbr>
hex-no-zero = <HEX excluding "0">
chunk-size = hex-no-zero *HEX
chunk-ext = *( ";" chunk-ext-name [ "=" chunk-ext-value ] )
chunk-ext-name = token
chunk-ext-val = token | quoted-string
chunk-da<wbr>ta = chunk-size(OCTET)</wbr>
footer = *entity-header
RFC文档中的Chunked解码过程如下:
length := 0
read chunk-size, chunk-ext (if any) and CRLF
while (chunk-size > 0) {
read chunk-da<wbr>ta and CRLF<br> append chunk-da<wbr>ta to entity-body<br> length := length + chunk-size<br> read chunk-size and CRLF<br> }<br> read entity-header<br> while (entity-header not empty) {<br> append entity-header to existing header fields<br> read entity-header<br> }<br> Content-Length := length<br> Remove "chunked" from Transfer-Encoding</wbr></wbr>
最后提供一段PHP版本的chunked解码代码:
$chunk_size=(integer)hexdec(fgets($socket_fd,4096) );
while(!feof($socket_fd)&&$chunk_size>0) {
$bodyContent.=fread($socket_fd,$chunk_size);
fread($socket_fd,2);//skip \r\n
$chunk_size=(integer)hexdec(fgets($socket_fd,4096) );
}
要解决服务器不返回Transfer-Encoding:chunked,在客户端请求的时候可以使用http 1.0的协议。
分享到:
相关推荐
Transfer-Encoding:chunked Location:http://localhost:5000/api/companies/61156544-d8bd-4787-a79a-a484dd9a382c 在浏览器中输入http://localhost:5000/api/companies/61156544-d8bd-4787-a79a-a484dd9a382c ...
Spring MVC + MessagePack 示例 跑步 $ mvn spring-boot:run $ curl -v "localhost:8080/calc?... Transfer-Encoding: chunked < Date: Fri, 16 Jan 2015 15:00:26 GMT < leftd right , answer
无服务器测试示例 该存储库说明了一些测试使用构建的应用程序的策略。 我已经在“媒介:上发表了有关此的文章 设置 安装Node 8.10(AWS Lambda支持的最新运行时)...Transfer-Encoding: chunked access-control-allow
进行Chunked编码传输的HTTP Response会在消息头部设置: Transfer-Encoding: chunked 表示Content Body将用Chunked编码传输内容。 Chunked编码使用若干个Chunk串连而成,由一个标明长度为0的chunk标示结束。每个...
通过本文给大家介绍php用curl读取http chunked数据的方法,本文介绍的非常详细,具有参考借鉴价值,感兴趣的朋友一起学习吧
Django EventStream EventStream为您的Django应用程序提供API终结点,...Transfer-Encoding: chunked Connection: Transfer-Encoding Content-Type: text/event-stream event: message data: {"foo": "bar"} event:
如何建造 首先,需要构建和 。 之后,只需运行 mvn clean install ...Transfer-Encoding: chunked Date: Fri, 19 Sep 2014 15:37:06 GMT { "id" : 2, "time_started" : "2014-09-19T15:36:54.478
#Echo服务器 一个简单的测试服务器,以回显所需的状态代码,主体或其他参数 用法 要启动服务器,只需运行node server.js ,然后开始向服务器发出请求。... Transfer-Encoding: chunked 示例:消息 $ curl -v http://12
Transfer-Encoding: chunked google了许久,发现是CDN的抓取好像只支持http 1.0 而nginx的 gzip_http_version选项默认值为1.1 在nginx的配置文件中增加或修改gzip_http_version参数,为: 代码如下: gzip_...
//网页 Transfer-Encoding: chunked,普通采集程序返回412错误 //采用 Chrome WebBrowser模式返回Html //需nuget 下载CefSharp.WinForms包
HTTP chunk数据包 服务器端发送的数据格式有俩类,我称之为按长度返回、按块返回这俩类。一类是在返回头中有Content-Length: 258,258标识该正文内容长度;还有一类是返回Transfer-Encoding: chunked。
XHR 使用其公共方法从ReadableStream读取数据作为ArrayBuffer s,并使用Transfer-Encoding: chunked将它们发送到网络,而无需等待整个响应主体准备就绪。 当ReadableStream关闭时,终止请求正文。 var reques
一、前言 ... 这里我主要学习过的案例自己敲了一遍,加深理解。在coding的过程中,我第一次把jq获取后的对象直接用forEach遍历,直接报错,是因为jq没有对应的这个方法,只有js数组可以调用。 二、知识点 ...
Stocazzo即服务 Node REST服务,用于将Stocazzo作为应用程序的资产提供。 API端点 / 将返回“ stocazzo”。...Transfer-Encoding: chunked cache-control: no-cache content-encoding: gzip conten
HTTP请求走私检测工具HTTP请求走私是一种高度严重的漏洞,该技术是攻击者通过模糊的HTTP请求走私以绕过安全控制并获得未经授权的访问权以执行恶意活动,该漏洞是在2005年由发现的,并于2019年8月重新发现。...
java 使用socked接收chunck分块数据 , 部分做修改, 原来参考地址:http://blog.csdn.net/lhj_5460/article/details/48156461
Chunked transfer encoding for HTTP/1.1 from Dug Song. DNS DDoS fix; bug report from Jon Oberheide. Various small improvements. libevent-1.2a.tar.gz- Release 2006-12-02 Made ...
3.6.1块传输编码(Chunked Transfer Coding) 3.7 媒体类型(Media Type) 3.7.1规范化和文本缺省 (Canonicalization and Text Defaults) 3.7.2多部分类型(Multipart type) 3.8 产品标记 (product Tokens) 3.9...
3.6.1块传输编码(Chunked Transfer Coding) 25 3.7 媒体类型(Media Type) 27 3.7.1规范化和文本缺省 27 3.7.2多部分类型(Multipart type) 28 3.8 产品标记 (product Tokens) 29 3.9 质量值(Quality Values...