HTTP分块传输

HTTP分块传输

用途

对于在发送HTTP头部前,无法计算出Content-Length的HTTP请求及回复(例如WEB服务端产生的动态内容),可以使用分块传输,使得不至于等待所有数据产生后,再发送带有Content-Length的HTTP头部,而是将已经产生的数据一块一块发送出去。

特点:

1,HTTP BODY数据成连续的块传输,每块数据的最开始处,指明了该数据块的大小,随后则是CRLF,数据,及结尾CRLF:

HTTP HEADERS
<CRLF>
1E<CRLF>
DATA1
<CRLF>
ED<CRLF>
DATA2
<CRLF>
0<CRLF>
<CRLF>

可见每块数据都是包含在两个CRLF之间,最后一块数据则是0CRLFCRLF,两个CRLF之间没有任何数据;数据大小以16进制字符串表示(不是二进制)。

2,Transfer-Encoding、TE头部:

  Transfer-Encoding 首部 -- 告知接收方,BODY数据使用何种传输编码,Transfer-Encoding: chunked,表明使用分块传输;

  TE 首部 -- 告知服务端,可以使用哪些传输编码,TE: trailers, chunked,表明可以使用 分块传输及拖挂;

  客户端发送请求时,也可以使用分块传输,但是一般客户端发送请求前,不知道服务端是否支持分块传输,所以,客户端可以发送HTTP头部,表明使用分块传输,假如服务端不支持,将会回复 411(Length Required) 错误,中断请求。

3,HTTP Header 拖挂

  如果客户端TE首部中说明可以接受拖挂,则可以在最后一个分块后面加上拖挂的 Header Entity;

  服务端产生的HTTP回复中,带有 Trailer 首部,告知客户端此回复中拖挂的 Header Entity 是哪些首部,除了 Transfer-Encoding、Trailer、Content-Length首部外,其他HTTP首部都可以作为拖挂发送;

HTTP/1.1 200 OK<CRLF>
...
Transfer-Encoding: chunked<CRLF>
Trailer: Content-MD5<CRLF>
<CRLF>
AA<CRLF>
....
<CRLF>
BB<CRLF>
...
<CRLF>
0<CRLF>
<CRLF>
Content-MD5: abcefgjslaa....<CRLF>

参考书籍:

《HTTP权威指南》

HTTP分块传输

时间: 2024-10-09 16:21:49

HTTP分块传输的相关文章

HTTP 笔记与总结(9)分块传输、持久链接 与 反向 ajax(comet / server push / 服务器推技术)

反向 ajax 又叫 comet / server push / 服务器推技术 应用范围:网页聊天服务器,例如新浪微博在线聊天.google mail 网页聊天 原理:一般而言,HTTP 协议的特点是,连接之后断开连接(服务器响应 Content-Length,收到了指定 Length 长度的内容时,也就断开了).在 HTTP 1.1 协议中,允许不写 Content-Length,比如要发送的内容长度确实不知道,此时需要一个特殊的 Content-Type:chunked,叫做分块传输,只有当

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

分块传输编码(Chunked transfer encoding)是超文本传输协议(HTTP)中的一种传输数据机制,同意HTTP由应用server发送给client应用( 一般是网页浏览器)的数据能够分成多个部分.分块传输编码仅仅在HTTP协议1.1版本号(HTTP/1.1)中提供. 通常,HTTP应答消息中发送的数据是整个发送的.Content-Length消息头字段表示数据的长度.数据的长度非常重要,由于client须要知道哪里是应答消息的结束,以及兴许应答消息的開始.然而,使用分块传输编码

文件分块传输

服务接收端: public bool AppendChunk(string serverFileName, byte[] buff, long offset, out string errMsg) { errMsg = string.Empty; int maxSize =1024 * 1024;//1M bool result = false; //"D:\MedicalImage\ZipReceived\" string ReceivePath = AppSettingHelper

http协议与分块传输,持久连接及反向ajax

web QQ都用过吧,这涉及到哪些技术,有一个就是反向ajax. 反向ajax又叫comet,server push,服务器推技术. 应用范围: 网页聊天服务器,, 新浪微博在线聊天,google mail 网页聊天,都有用到. 原理: 一般而言, HTTP协议的特点, 连接<->断开. 具体什么时间断开? 服务器响应content-length,收到到指定length长度的内容时,也就断开了. 在http1.1协议中, 允许你不写content-length,比如要发送的内容长度确实不知道时

HTTP文件传输

HTTP协议用于文件传输时,一般把文件内容放到消息体中.作为TCP之上的流式传输协议,发送端和接收端可以对大文件进行流式的发送和接收. 1.确定大小的文件传输 消息头部的Content-Length字段表示文件的长度,用于接收端确定文件的结束. 2.Chunked编码 当文件大小无法事先确定时,无法设置Content-Length字段.此时可以用分块传输的方式,将文件分成多个部分进行发送.在分块发送方式下,头部增加Transfer-Encoding: chunked,存在这个头部时不允许再加上C

Delphi TCOM控件串口通信调试寻找文件传输速度慢的原因

PC工具: IC util 手持设备:Dynasty ARM嵌入式设备 通信设备: TTL-USB串口传输器 问题:IC_Util向dynasty传输所需的配置文件,传输速度慢. 传输10k大小的文件 顺利时耗时大约10s,文件分块传输,1k/block or 2k/block. 波特率115200 传输时对于接受和发送的函数需要做适当的延时处理,同时需要对传输时的block大小做一定规定,BLOCK为2k时传输正常,BLOCK为1k时IC_Util将会不时的出现接收超时的问题. Delphi串

UDP可靠传输那些事

有空来论坛走走,发现讨论udp可靠传输又热了起来,有人认为udp高效率,有人认为udp丢包重传机制容易控制,还有朋友搞极限测试,当然也有人推销自己的东西,这里写一点我个人的看法. udp可靠传输其实非常非常的简单,我最开始接触udp可靠传输大约是在2005年,因为那时候开发FtpAnywhere,由于路由的映射和网关nat处理方面,认为udp具有天生优势,因此开始编写自己的udp可靠传输协议,好象那个时候已经有了udt,我也下了源代码看了下,不过很快就看不下去了,因为它用了定时器,加上跨平台处理

HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP

题图:by @Olga Hi,大家好,我是承香墨影! HTTP 协议在网络知识中占据了重要的地位,HTTP 协议最基础的就是请求和响应的报文,而报文又是由报文头(Header)和实体组成.大多数 HTTP 协议的使用方式,都是依赖设置不同的 HTTP 请求/响应 的 Header 来实现的. 本系列<实用 HTTP>就抛开常规的 Header 讲解式的表述方式,从实际问题出发,来分析这些 HTTP 协议的使用方式,到底是为了解决什么问题?同时讲解它是如何设计的和它实现原理. HTTP 协议是一

#WEB安全基础 : HTTP协议 | 0x11 HTTP的分块传输模块

HTTP通信中,请求的编码实体资源没全部传输完成之前,浏览器无法显示页面,所以传输大容器数据时,把数据分块,能让浏览器逐步显示页面,这就叫分块传输模块 请看分块传输的流程图 每一块都会用十六进制来标记块的大小,而实体主体的最后一块会使用"0(CR-LF)"来标记 使用分块传输编码的实体主体会由接收内容的客户端负责解码,恢复到编码前的实体主体 HTTP/1.1 存在一种传输编码的机制,他可以在通信时按照某种编码方式来传输,但只定义作用于分块传输编码中 对于编码的研究,以后可以仔细学习,如