http Chunked

原创 2006年06月12日 16:50:00

有的时候服务器生成HTTP回应是无法确定信息大小的,这时用Content-Length就无法事先写入长度,而需要实时生成消息长度,这时服务器一般采用Chunked编码。

在进行Chunked编码传输时,在回复消息的头部有transfer-coding并定义为Chunked,表示将用Chunked编码传输内容。

在jsmartsales中,在midlet向服务端以POST方式发送Request时,发现是以Chunked方式编码的(我的服务端不支持Chunked编码);

在去掉dos.flush();后,就不是以Chunked方式编码的了,程序正常,servlet端可以以Request.getParameter()方法取到参数了

为什么呢?

先看DataOutputStream类的javadoc

flush

public void flush()
           throws IOException
Flushes this data output stream. This forces any buffered output bytes to be written out to the stream.

The flush method of DataOuputStream calls the flush method of its underlying output stream.

 

Overrides:
flush in class FilterOutputStream
Throws:
IOException - if an I/O error occurs.
See Also:
FilterOutputStream.out, OutputStream.flush()

一篇csdn上关于flush()方法的讨论

http://community.csdn.net/Expert/topic/4800/4800968.xml?temp=.1741144

flush方法即使在缓冲区中没有满的情况下,也会将缓冲区内的内容强制写到外设,也就是所谓的刷新。flush方法不是对所有的OutputStream子类起作用,只对那些使用缓冲区的OutputStream子类有效。。。。
调用close方法,系统在关闭这个流前,也会将缓冲区的内容写到外设上。。。。
所以你在程序中要注意对flush的调用,不然可能碰到奇怪的问题。。。

这篇文章:http://www.zdnet.com.cn/developer/code/story/0,3800066897,39381759-2,00.htm说的很清楚

dos.flush(); //包含本句,在某些设被上将可能会产生不可预期的结果

调用flush ()方法的意图是发送已经写入的数据到DataOutputStream的服务器的缓冲区中。在某些电话上,这个操作工作正常,在其他的电话上,它导致HTTP请求的Transfer - Encoding被设置为" chunked ",有一些随机字符被放到请求本身的前面和后面。那又怎样处理这个问题呢?这个方法调用实际上是根本不需要的。在接下来的一行中,服务器连接打开(通过openInputStream ()),将自动输入缓冲区。因此,你最好不要调用缓冲区的flush()方法。


模拟http请求chunked解析办法

今天在干坏事抓取别人页面(http://www.xafuda.cn/article/about.html)时候遇到一个问题,平时我们在post数据后,大不了要求提交cookie,但是今天这个测试了N遍...
  • keliuhua1106
  • keliuhua1106
  • 2017年04月01日 21:55
  • 320

【HTTP协议】Transfer-Encoding: chunked 长度不确定的http报文

Transfer-Encoding: chunked 表示输出的内容长度不能确定,普通的静态页面、图片之类的基本上都用不到这个。 但动态页面就有可能会用到,但我也注意到大部分asp,php,as...
  • zhubosa
  • zhubosa
  • 2016年10月26日 11:05
  • 936

http协议里的chunked编码与测试

http协议里的chunked编码与测试 如果有写过http下载的人,或多或少了解一点chunked编码的传输方式。例如笔者最初不知道这个http传输方式,以前能行的代码有一天就突然不行了,抓包...
  • u013401853
  • u013401853
  • 2016年12月02日 10:45
  • 3110

用java发送Http请求,并对chunked解码的介绍

很多时候,都要去互联网上抓取一些网页的数据,目前普遍的都使用chunked的编码,如果自己通过socket去获取数据,就需要对这些数据进行解码,这里我简单介绍下如何对chunked进行编码。给出了一个...
  • lhj_5460
  • lhj_5460
  • 2015年09月01日 12:47
  • 3273

HTTP响应Chunked编码

最近公司有个应用要为第3方系统提供接口,大概要求就是对方向我方系统发送一个XML报文,我方根据请求报文响应数据,并以XML格式进行返回.测试的时候发现一个比较诡异的问题,有时候请求响应会无故多生成一些...
  • kobejayandy
  • kobejayandy
  • 2015年05月02日 20:43
  • 1321

http协议中content-length 以及chunked编码分析

http://blog.sae.sina.com.cn/archives/3795 http协议中content-length 以及chunked编码分析 ...
  • wangyin159
  • wangyin159
  • 2015年08月07日 10:16
  • 768

HTTP协议之chunk编码(分块传输编码)

分块传输编码(Chunked transfer encoding)是超文本传输协议(HTTP)中的一种数据传输机制,允许HTTP由网页服务器发送给客户端应用( 通常是网页浏览器)的数据可以分成多个部分...
  • xifeijian
  • xifeijian
  • 2015年06月11日 14:26
  • 25473

http协议中的头部字段:Transfer-Encoding

最近项目用到了nginx和php-fpm,所以自己写了个http客户端,发现每次使用客户端发送请求后,服务器返回的数据前面都多了一个莫名其妙的16进制字符串,并且头部信息中包含Transfer-Enc...
  • sole_cc
  • sole_cc
  • 2016年07月24日 11:23
  • 650

HTTP协议的chunked编码

一般情况HTTP的Header包含Content-Length域来指明报文体的长度。如:             有时候服务生成HTTP回应是无法确定消息大小的,比如大文件的下载,或者后台...
  • cjjwwss
  • cjjwwss
  • 2013年10月22日 22:10
  • 316

HTTP协议之Chunked解析

HTTP协议之Chunked解析 在网上找了好一会,始终没发现有解析Chunked编码的文章,那就自己写一个吧,呵呵。 网上使用Chunked编码的网站似乎并不是很多,除了...
  • peiwuyang
  • peiwuyang
  • 2015年03月04日 15:28
  • 255
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:http Chunked
举报原因:
原因补充:

(最多只允许输入30个字)