http1.1的chunked解码解析

http1.1的chunked解码解析

ID:37721036

大小:32.20 KB

页数:5页

时间:2019-05-29

http1.1的chunked解码解析_第1页
http1.1的chunked解码解析_第2页
http1.1的chunked解码解析_第3页
http1.1的chunked解码解析_第4页
http1.1的chunked解码解析_第5页
资源描述:

《http1.1的chunked解码解析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、HTTP1.1中CHUNKED编码解析一般HTTP通信时,会使用Content-Length头信息性来通知用户代理(通常意义上是浏览器)服务器发送的文档内容长度,该头信息定义于HTTP1.0协议RFC194510.4章节中。浏览器接收到此头信息后,接受完Content-Length中定义的长度字节后开始解析页面,但如果服务端有部分数据延迟发送吗,则会出现浏览器白屏,造成比较糟糕的用户体验。解决方案是在HTTP1.1协议中,RFC2616中14.41章节中定义的Transfer-Encoding:chunked的头信息,chu

2、nked编码定义在3.6.1中,所有HTTP1.1应用都支持此使用trunked编码动态的提供body内容的长度的方式。进行Chunked编码传输的HTTP数据要在消息头部设置:Transfer-Encoding:chunked表示ContentBody将用chunked编码传输内容。根据定义,浏览器不需要等到内容字节全部下载完成,只要接收到一个chunked块就可解析页面.并且可以下载html中定义的页面内容,包括js,css,image等。采用chunked编码有两种选择,一种是设定Server的IObuffer长度让S

3、erver自动flushbuffer中的内容,另一种是手动调用IO中的flush函数。不同的语言IO中都有flush功能:lphp:   ob_flush();flush();lperl:  STDOUT->autoflush(1);ljava: out.flush();lpython: sys.stdout.flush()lruby: stdout.flush采用HTTP1.1的Transfer-Encoding:chunked,并且把IO的bufferflush下来,以便浏览器更早的下载页面配套资源。当不能预先确定报文体

4、的长度时,不可能在头中包含Content-Length域来指明报文体长度,此时就需要通过Transfer-Encoding域来确定报文体长度。Chunked编码一般使用若干个chunk串连而成,最后由一个标明长度为0的chunk标示结束。每个chunk分为头部和正文两部分,头部内容指定下一段正文的字符总数(非零开头的十六进制的数字)和数量单位(一般不写,表示字节).正文部分就是指定长度的实际内容,两部分之间用回车换行(CRLF)隔开。在最后一个长度为0的chunk中的内容是称为footer的内容,是一些附加的Header信息

5、(通常可以直接忽略)。上述解释过于官方,简而言之,chunked编码的基本方法是将大块数据分解成多块小数据,每块都可以自指定长度,其具体格式如下(BNF文法):Chunked-Body =*chunk      //0至多个chunklast-chunk    //最后一个chunktrailer      //尾部CRLF       //结束标记符chunk     =chunk-size[chunk-extension]CRLFchunk-dataCRLFchunk-size  =1*HEXlast-chunk  =1

6、*("0")[chunk-extension]CRLFchunk-extension=*(";"chunk-ext-name["="chunk-ext-val])chunk-ext-name=tokenchunk-ext-val =token

7、quoted-stringchunk-data  =chunk-size(OCTET)trailer    =*(entity-headerCRLF)解释:lChunked-Body表示经过chunked编码后的报文体。报文体可以分为chunk,last-chunk,trailer和结

8、束符四部分。chunk的数量在报文体中最少可以为0,无上限;l每个chunk的长度是自指定的,即,起始的数据必然是16进制数字的字符串,代表后面chunk-data的长度(字节数)。这个16进制的字符串第一个字符如果是“0”,则表示chunk-size为0,该chunk为last-chunk,无chunk-data部分。l可选的chunk-extension由通信双方自行确定,如果接收者不理解它的意义,可以忽略。ltrailer是附加的在尾部的额外头域,通常包含一些元数据(metadata,metameans"aboutin

9、formation"),这些头域可以在解码后附加在现有头域之后下面分析用ethereal抓包使用Firefox与某网站通信的结果(从头域结束符后开始):Address 0.......................... f000c0           31000d0  6666630

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。