`

transfer-encoding:chunked的含义

阅读更多

        Transfer-Encoding: chunked表示输出的内容长度不能确定,普通的静态页面、图片之类的基本上都用不到这个。

        但动态页面就有可能会用到,但我也注意到大部分asp,php,asp.net动态页面输出的时候大部分还是使用Content-Length,没有使用Transfer-Encoding: chunked。

        不过如果结合:Content-Encoding: gzip 使用的时候,Transfer-Encoding: chunked还是比较有用的。

        记得以前实现:Content-Encoding: gzip 输出时,先把整个压缩后的数据写到一个很大的字节数组里(如 ByteArrayOutputStream),然后得到数组大小 -> Content-Length。

        如果结合Transfer-Encoding: chunked使用,就不必申请一个很大的字节数组了,可以一块一块的输出,更科学,占用资源更少。

        这在http协议中也是个常见的字段,用于http传送过程的分块技术,原因是http服务器响应的报文长度经常是不可预测的,使用Content-length的实体搜捕并不是总是管用。

        分块技术的意思是说,实体被分成许多的块,也就是应用层的数据,TCP在传送的过程中,不对它们做任何的解释,而是把应用层产生数据全部理解成二进制流,然后按照MSS的长度切成一份一份的,一股脑塞到tcp协议栈里面去,而具体这些二进制的数据如何做解释,需要应用层来完成,所以在这之前,一块整体应用层的数据需要等它分成的所有TCP  segment到达对方,重新组装后,应用程序才使用自己的解码方法还原它们。

        HTTP1.1采用了持久的连接,也就是一次TCP的连接不马上释放,允许许多的请求跟响应在一个TCP的连接上发送,所以客户机与服务器需要某种方式来标示一个报文在哪里结束和在下一个报文在哪里开始。简单的方法是使用content-length,但这只有当报文长度可以预先判断的时候才起作用,而对于动态的内容或者在发送数据前不能判定长度的情况下,可以使用分块的方法来传送编码。

        如图:

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

        进行Chunked编码传输的HTTP Response会在消息头部设置:Transfer-Encoding: chunked,表示Content Body将用Chunked编码传输内容。

        Chunked编码使用若干个Chunk串连而成,由一个标明长度为0的chunk标示结束。每个Chunk分为头部和正文两部分,头部内容指定下一段正文的字符总数(十六进制的数字)和数量单位(一般不写),正文部分就是指定长度的实际内容,两部分之间用回车换行(CRLF)隔开。在最后一个长度为0的Chunk中的内容是称为footer的内容,是一些附加的Header信息(通常可以直接忽略)。


        这里面只有一个有意义的chunke以及一个footer。第一个chunk,头部是3134这两个字节,表示的是1和4这两个ascii字符,被http协议解释为十六进制数14,也就是十进制的20。后面紧跟0d0a,再接着是20个字节的chunk正文(图中的011e~0131)。

        后面再接着0d0a,然后就是footer了,30表示ascii字符0,http解释为长度是0(也说明了这是最后一个chunk),后面紧跟0d0a,然后正文部分为空,再接0d 0a表示结束。

 

文章来源:http://blog.csdn.net/whatday/article/details/7571451

  • 大小: 38.8 KB
  • 大小: 221.2 KB
  • 大小: 33.1 KB
分享到:
评论

相关推荐

    P21_创建Company资源POST_P20_HTTP方法的安全性与幂等性_Routine.Api2020_2_7.rar

    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-msgpack-sample:Spring MVC + MessagePack 示例

    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

    serverless-testing-examples:无服务器测试示例

    无服务器测试示例 该存储库说明了一些测试使用构建的应用程序的策略。 我已经在“媒介:上发表了有关此的文章 设置 安装Node 8.10(AWS Lambda支持的最新运行时)...Transfer-Encoding: chunked access-control-allow

    php下HTTP Response中的Chunked编码实现方法

    进行Chunked编码传输的HTTP Response会在消息头部设置: Transfer-Encoding: chunked 表示Content Body将用Chunked编码传输内容。 Chunked编码使用若干个Chunk串连而成,由一个标明长度为0的chunk标示结束。每个...

    关于PHP 如何用 curl 读取 HTTP chunked 数据

    通过本文给大家介绍php用curl读取http chunked数据的方法,本文介绍的非常详细,具有参考借鉴价值,感兴趣的朋友一起学习吧

    django-eventstream:Django的服务器发送事件

    Django EventStream EventStream为您的Django应用程序提供API终结点,...Transfer-Encoding: chunked Connection: Transfer-Encoding Content-Type: text/event-stream event: message data: {"foo": "bar"} event:

    neustar-clouds-proxy

    如何建造 首先,需要构建和 。 之后,只需运行 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_server_js:一个简单的测试服务器,可以返回所需的状态代码或有效负载

    #Echo服务器 一个简单的测试服务器,以回显所需的状态代码,主体或其他参数 用法 要启动服务器,只需运行node server.js ,然后开始向服务器发出请求。... Transfer-Encoding: chunked 示例:消息 $ curl -v http://12

    Nginx中使用gzip_http_version解决CDN只支持http 1.0问题

    Transfer-Encoding: chunked google了许久,发现是CDN的抓取好像只支持http 1.0 而nginx的 gzip_http_version选项默认值为1.1 在nginx的配置文件中增加或修改gzip_http_version参数,为: 代码如下: gzip_...

    CefSharp.rar

    //网页 Transfer-Encoding: chunked,普通采集程序返回412错误 //采用 Chrome WebBrowser模式返回Html //需nuget 下载CefSharp.WinForms包

    streams_integration

    XHR 使用其公共方法从ReadableStream读取数据作为ArrayBuffer s,并使用Transfer-Encoding: chunked将它们发送到网络,而无需等待整个响应主体准备就绪。 当ReadableStream关闭时,终止请求正文。 var reques

    HTTP服务器返回的chunk数据包

    HTTP chunk数据包 服务器端发送的数据格式有俩类,我称之为按长度返回、按块返回这俩类。一类是在返回头中有Content-Length: 258,258标识该正文内容长度;还有一类是返回Transfer-Encoding: chunked。

    node.js基础模块http、网页分析工具cherrio实现爬虫

    一、前言 ... 这里我主要学习过的案例自己敲了一遍,加深理解。在coding的过程中,我第一次把jq获取后的对象直接用forEach遍历,直接报错,是因为jq没有对应的这个方法,只有js数组可以调用。 二、知识点 ...

    http-request-smuggling:HTTP请求走私检测工具

    HTTP请求走私检测工具HTTP请求走私是一种高度严重的漏洞,该技术是攻击者通过模糊的HTTP请求走私以绕过安全控制并获得未经授权的访问权以执行恶意活动,该漏洞是在2005年由发现的,并于2019年8月重新发现。...

    stocazzo:服务式Stocazzo

    Stocazzo即服务 Node REST服务,用于将Stocazzo作为应用程序的资产提供。 API端点 / 将返回“ stocazzo”。...Transfer-Encoding: chunked cache-control: no-cache content-encoding: gzip conten

    java 使用socked接收chunck分块数据

    java 使用socked接收chunck分块数据 , 部分做修改, 原来参考地址:http://blog.csdn.net/lhj_5460/article/details/48156461

    libevent-1.1b_1.4.13-stable_2.0.3-alpha 源码(资料中转)

    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 ...

    HTTP协议详解

    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...

    Http1.1超文本传输协议中文版

    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...

Global site tag (gtag.js) - Google Analytics