总结:
HTTP 1.1时,Response要嘛通过Content-Length来指定要传输的内容大小,要嘛通过Transfer-Encoding: chunked来传输动态大小的内容,此时要求Response传输的内容要符合chunk encoding的规定。
从抓包的角度来说,两个请求如果HTTP 参数(Head和Body)都相同的话,是等价的,不管请求是从浏览器还是Java代码发出来的。

CRLF -- Carriage-Return Line-Feed回车换行 回车(CR, ASCII 13, \r) 换行(LF, ASCII 10, \n)。
carriage ['kæridʒ] n. 运输;运费;四轮马车;举止;客车厢

HTTP1.1默认 支持长连接(持久连接),长连接避免为每个请求都创建各自的连接,而是多个请求使用一个已经建立好的连接。如果每个HTTP请求都进行set up和tear down,这对于性能损失是非常严重的。
在长连接中,每次传输的长度必须都被计算的非常精确。如果在http头中以Content-Length来标记请求request或者响应response的大小,客户端或者服务器就只会从流中读取 Content-Length指定大小的字节,然后表明本次传输结束。使得下一次客户端请求以及服务器端响应 继续使用这个相同的socket连接成为可能。

在交互式应用程序中有1个问题,就是它并不知道将要传输的数据有多大。
在HTTP1.0中,服务器就会省略response头中的Content-Length而持续写数据出去,当服务器挂了的话,它简单地断开连接。而经典的HTTP客户端会一直读数据直到碰到-1(传输结束的标识符)。
为了处理这个问题,HTTP1.1中增加了一个特殊的header: Transfer-Encoding:chunked,允许响应response被分块chunked。每次向连接写数据的时候会先计算大小,最后在response的尾部以一个0长度的chunk块标志着此次传输的结束。即HTTP1.1支持chunked编码,它允许HTTP消息被分成多块后再进行传输。 Chunking一般用在服务器响应response的时候,但是客户端也可以chunk大的请求request。 即Chunk编码允许服务器在发送完Header后,发送更多的Body内容。

Chunked编码使用若干个Chunk块串连而成, 每个Chunk块都以一个表明chunk快大小的16进制数字和一个额外的CRLF(回车换行)开始,后面跟着指定大小的内容。即每个Chunk块分为头部和正文两部分,头部内容指定下一段正文的字符总数(十六进制的数字)和数量单位(一般不写),正文部分就是指定长度的实际内容,两部分之间用回车换行(CRLF)隔开。 最后以一个长度为0的Chunk表明本次传输结束 。
1个典型的Chunk传输例子:

Html代码  
  1. C\r\n
  2. Some data...
  3. 11\r\n
  4. Some more data...
  5. 0\r\n
C\r\n
Some data...
11\r\n
Some more data...
0\r\n

上述消息内容包含2个chunk块,第一个块是12字节长度(hex C),第二个块是17字节长度(hex 11)。

Java中减少Chunk数量的一种方法是不要适应flush(),只使用1个write()方法来输出所有内容。如果被输出的内容大小大于output的buffer大小,那么输出还是会被chunk,但是不使用flush()方法还是可以有效地减少不必要的chunking。

在有些情况下,有些客户端或者服务器只能处理老的HTTP1.0的行为。此时,应该使用 Connection: close的header来通知接收部分不要使用长连接。
Connection: keep-alive表明可以使用长连接。

参考: HTTP Chunking

相关解决的问题:
Axis2 RPC客户端默认根据Content-Length的大小来读取Response,而相应的Web Service使用chunked encoding的方式来传输,因此报错。通过设置参数来通知服务器不使用Chunk编码来解决。
Axis2 客户端调用时报【Transport error: 411 Error: Length Required】

CRLF、missing CR这2个错误都表明返回的Response内容不正确。
即返回的Response Header头中指定了Transfer-Encoding:chunked,但是传输的Response内容却不符合HTTP 1.1 RFC中对于chunked的规定。
因此在apache http client包通过以下2种不同的方法调用Request后,做解码操作时,在某个读取某个chunk时,读取根据CRLF标识符前面指定的字节数后,紧跟着应该是下一个Chunk,而读下一个Chunk时,发现CRLF前面的字符并不是16进制的数,即返回的Response不符合Chunking中对于分块的规定,所以报错。

Java代码  
  1. java.io.IOException: CRLF expected at end of chunk: 47/109
  2. at org.apache.commons.httpclient.ChunkedInputStream.readCRLF(ChunkedInputStream.java:207)
  3. at org.apache.commons.httpclient.ChunkedInputStream.nextChunk(ChunkedInputStream.java:219)
  4. at org.apache.commons.httpclient.ChunkedInputStream.read(ChunkedInputStream.java:176)
  5. at java.io.FilterInputStream.read(Unknown Source)
  6. at org.apache.commons.httpclient.AutoCloseInputStream.read(AutoCloseInputStream.java:108)
  7. at java.io.FilterInputStream.read(Unknown Source)
  8. at org.apache.commons.httpclient.AutoCloseInputStream.read(AutoCloseInputStream.java:127)
  9. at org.apache.jmeter.protocol.http.sampler.HTTPSampler2.sample(HTTPSampler2.java:853)
  10. at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1038)
  11. at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1022)
  12. at org.apache.jmeter.threads.JMeterThread.doNormalSample(JMeterThread.java:292)
  13. at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:351)
  14. at java.lang.Thread.run(Unknown Source)
  15. java.io.IOException: missing CR
  16. at sun.net.www.http.ChunkedInputStream.processRaw(Unknown Source)
  17. at sun.net.www.http.ChunkedInputStream.readAheadNonBlocking(Unknown Source)
  18. at sun.net.www.http.ChunkedInputStream.readAhead(Unknown Source)
  19. at sun.net.www.http.ChunkedInputStream.available(Unknown Source)
  20. at java.io.FilterInputStream.available(Unknown Source)
  21. at java.io.BufferedInputStream.read(Unknown Source)
  22. at java.io.FilterInputStream.read(Unknown Source)
  23. at org.apache.jmeter.protocol.http.sampler.HTTPSampler.readResponse(HTTPSampler.java:260)
  24. at org.apache.jmeter.protocol.http.sampler.HTTPSampler.sample(HTTPSampler.java:480)
  25. at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1038)
  26. at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1022)
  27. at org.apache.jmeter.threads.JMeterThread.doNormalSample(JMeterThread.java:292)
  28. at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:351)
  29. at java.lang.Thread.run(Unknown Source)

Http chunk介绍相关推荐

  1. 图形图像基础 之 png介绍

    文章目录 一.png相关概念 png---一种无损压缩算法的位图格式 png和bmp.jpeg图片比较 libpng---一款C语言编写的读写PNG文件的跨平台的库 二.png文件格式---文件标签+ ...

  2. Linux堆内存管理深入分析

    0 前言 近年来,漏洞挖掘越来越火,各种漏洞挖掘.利用的分析文章层出不穷.从大方向来看,主要有基于栈溢出的漏洞利用和基于堆溢出的漏洞利用两种.国内关于栈溢出的资料相对较多,这里就不累述了,但是关于堆溢 ...

  3. HTML页面加载和解析流程详细介绍

    浏览器加载和渲染html的顺序.如何加快HTML页面加载速度.HTML页面加载和解析流程等等,在本文将为大家详细介绍下,感兴趣的朋友不要错过 浏览器加载和渲染html的顺序 1. IE下载的顺序是从上 ...

  4. MySQL · 引擎介绍 · Sphinx源码剖析(三)

    在本节中我会介绍Sphinx在构建索引之前做的一些事情,主要是从mysql拉取数据保存,然后分词排序保存到内存等等一系列的操作.下面是几个相关指令 sql_query = \SELECT id, gr ...

  5. 深度介绍分布式系统原理与设计

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 1 概念 1.1 模型 1.2 副本 1.3 衡量分布式系 ...

  6. Linux监控工具介绍系列——free`

    在Linux系统中,我们查看.监控系统内存使用情况,一般最常用的命令就是free.free命令其实非常简单,参数也非常简单,但是里面很多知识点未 必你都掌握了.下面总结一下我所了解的free命令.如有 ...

  7. NoSQL介绍、memcached介绍、安装memcached、 查看memcached状态

    为什么80%的码农都做不了架构师?>>>    NoSQL介绍 什么是NoSQL? 非关系型数据库就是NoSQL,关系型数据库代表MySQL 首先NoSQL是一个数据库,它是用来存储 ...

  8. Webpack 的简单介绍

    本文介绍了一些 webpack 的核心概念以及一些概念术语,并对核心配置做了一些简单的用法讲解.建议刚刚接触 Webpack 的朋友可以先了解一下.想了解更多 Webpack 使用以及配置的话可以参考 ...

  9. mysql 5.7_MySQL 5.7新特性介绍

    1. 介绍身处MySQL这个圈子,能够切身地感受到大家对MySQL 5.7的期待和热情,似乎每个人都迫不及待的想要了解.学习和使用MySQL 5.7.那么,我们不禁要问,MySQL 5.7到底做了哪些 ...

最新文章

  1. Affinity Propagation+聚类
  2. Fiori应用里如何给客户主数据维护图片
  3. 基于Docker的Redis集群简单搭建
  4. 2010年被逼出来的10个中国IT产品
  5. 支付即服务、门店小程序、微信先享卡分别亮相,微信支付持续助力行业数字化升级
  6. JAVA中遗留的问题_java中遗留的小问题
  7. js 上传文件到 minio
  8. Cellular Automaton UVA - 1386
  9. 一篇文章,读懂9种优先的管理之道
  10. Java经典问题算法大全
  11. Mobileye自动驾驶汽车在纽约市开跑
  12. 窗口最大化后超出液晶显示器的屏幕范围的问题
  13. Redis Cluster内存爆满
  14. 简述使用混合传递参数时的基本原则_过程控制系统与仪表习题答案 -
  15. 淘宝用户日志数据集的用户行为分析与用户分群
  16. 从宗教信仰看东西方文化对人的影响
  17. 网络打印两个基本端口(LPD和9100)的相关知识
  18. 04 数学软件与建模---最优化模型
  19. 《Hadoop权威指南》---初识Hadoop
  20. 环海陆港今日财经报告

热门文章

  1. HTTP权威指南读后感
  2. 欧拉如何解决哥尼斯堡七桥问题(二)
  3. list_del()
  4. EE308_Lab1
  5. 解决双屏同时只能一个工作,另一个黑屏问题
  6. 自动化测试学习daytwo(接口自动化概论)
  7. python字典的常用方法有哪些_python中字典常用方法
  8. 恒定积自动做市--兑换比例,滑点,平均成本,资金进出对价格影响
  9. 关于深度可分离卷积 Depthwise Pointwise Convolution
  10. 在excel 中如何让一串数字真正的变为时间格式