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><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><CRLF>
<CRLF>
Content-MD5: abcefgjslaa....<CRLF>

参考书籍:

《HTTP权威指南》

HTTP分块传输的更多相关文章

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

    反向 ajax 又叫 comet / server push / 服务器推技术 应用范围:网页聊天服务器,例如新浪微博在线聊天.google mail 网页聊天 原理:一般而言,HTTP 协议的特点是 ...

  2. Burpsuit分块传输插件绕WAF原理和技巧(转)

      0x00 原理 给服务器发送payload数据包,使得waf无法识别出payload,当apache,tomcat等web容器能正常解析其内容.如图一所示 0x02  实验环境 本机win10+x ...

  3. HTTP协议响应头之Transfer-Encoding:分块传输详解

    Http Connection有两种连接方式:短连接和长连接:短连接即一次请求对应一次TCP连接的建立和销毁过程,而长连接是多个请求共用同一个连接这样可以节省大量连接建立时间提高通信效率.目前主流浏览 ...

  4. HTTP要点概述:七,编码,压缩传输,分块传输

    一,编码: HTTP 在传输数据时可以按照数据原貌直接传输,但也可以在传输过程中通过编码提升传输速率.通过在传输时编码,能有效地处理大量的访问请求.但是,编码的操作需要计算机来完成,因此会消耗更多的 ...

  5. HTTP 响应的分块传输

    Transfer-Encoding 响应头用于告诉客户端服务器发送内容的编码格式. 其可选值有: chunked:数据分块发送.此时应缺省 Content-Length 响应头. compress:使 ...

  6. [转载]利用分块传输绕过WAF进行SQL注入

    原理 客户端给服务器发送数据的时候,如果我们利用协议去制作payload,就可以绕过http协议的waf,实现SQL注入 分块传输编码(Chunked transfer encoding)是HTTP中 ...

  7. 利用分块传输吊打所有WAF--学习笔记

    在看了bypassword的<在HTTP协议层面绕过WAF>之后,想起了之前做过的一些研究,所以写个简单的短文来补充一下文章里“分块传输”部分没提到的两个技巧. 技巧1 使用注释扰乱分块数 ...

  8. 利用分块传输绕WAF

    分块传输原理介绍 背景 HTTP Connection有两种连接方式:短连接和长连接: 短连接即一次请求对应一次TCP连接的建立和销毁过程. 长连接是多个请求共用同一个连接这样可以节省大量连接建立时间 ...

  9. HTTP协议之分块传输与分段编码

    目录 数据的分块传输 数据的分段编码(transfer-encoding) 前置知识:HTTP协议 数据的分块传输 我们都知道http协议是由TCP协议封装而来的应用层协议.我们和服务器之间的每次ht ...

随机推荐

  1. ASP.NET MVC3 ModelState.IsValid为false的问题

    模型验证通常在submit后调用Action之前进行验证,eg: public class ZhengXing    {        [Key]        public int ZhengXin ...

  2. ECLIPSE TOMCAT CONFIG JSTL

    {LJ?Dragon}[标题]Eclipse 配置 JSTL标签库 {LJ?Dragon}[Diary]2017年,愉快的开始:当和他们离别时,感觉失去了整个世界.........   1.JSTL简 ...

  3. Hard 计算0到n之间2的个数 @CareerCup

    一种是Brute force,O(nlogn) 另一种是找规律O(n),见http://hawstein.com/posts/20.4.html 当某一位的数字小于2时,那么该位出现2的次数为:更高位 ...

  4. maven建module子模块

    在父工程中,点击new ->other  ->maven  -> maven module, 按照提示直到完成. module 可以是普通的工程也可以是web工程. 遇到的问题: 新 ...

  5. 【转】 Android Studio SVN 使用方法

    Android Studio SVN 使用方法 如何安装配置SVN 请直接参考<SVN在Android Studio中的配置> http://www.cnblogs.com/songmen ...

  6. HDU 2066-一个人的旅行(最短路Dijkstra)

    一个人的旅行 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  7. diy 电脑 重装系统

    1\组装好电脑 2\硬盘的红灯只亮一会,找不到 硬盘 .bios里 硬盘设置里 IDE修改为 ACHI即可. 3\老毛桃 \ 用桌面的那个分区软件 分区 100G,300G 4\找到U盘 的iso 文 ...

  8. [转] 用PDB库调试Python程序

    Python自带的pdb库,发现用pdb来调试程序还是很方便的,当然了,什么远程调试,多线程之类,pdb是搞不定的. 用pdb调试有多种方式可选: 1. 命令行启动目标程序,加上-m参数,这样调用my ...

  9. [转] Linux TCP/IP网络小课堂:net-tools与iproute2大比较

    PS:netstat选项是-planet,方便记忆 http://os.51cto.com/art/201409/450886.htm 如今许多系统管理员仍结合使用ifconfig.route.arp ...

  10. gridview添加header

    gridview是不能添加header的,这里的解决方法是将listview改造成gridview使用,功能很好用,唯一的缺点是列数不能自适应 示例代码下载地址http://pan.baidu.com ...