• HTTP协议中的chunked编码解析


     HTTP协议中的chunked传输编码全接触。


    在HTTP协议中,服务器发往客户端的数据中,通常都包括HTTP头和HTTP体,当存在HTTP体的时候,HTTP体的长度通常是由HTTP头内的“Content-Length”字段确定。


    就像下图:

    640?wx_fmt=jpeg


    不过,Content-Length”字段并非总是存在,这就涉及到今天要讲的chunked编码,它在HTTP协议标准的早期并不存在,而是在HTTP 1.1 才开始被引入到协议中。


    chunked编码允许服务器发出的数据被分成多个部分,这样,服务器就可以在发送数据前无需知道待发送内容的总大小。因为它不需要填充Content-Length”字段。


    当HTTP使用chunked编码进行传输的时候,在HTTP头部会出现字段“Transfer-Encoding: chunked”。同时,Content-Length”字段相应地就不会出现了。


    如图:

    640?wx_fmt=jpeg


    当HTTP头部标示了HTTP体的数据为chunked编码时,整个HTTP体将是chunked编码。


    chunked编码的一般格式如下:

    len1 data1 len2 data2 ........0


    即数据采用分块的模式进行传输,编码后的每块数据包含一个长度值和对应长度的传输内容,长度值为16进制数据的字符串形式,如上图的b50表示该块数据的传输内容长度为0xb50字节。长度值之后为固定值" ",传输内容之后也是固定值" "。chunked编码的最后一块为“0 ”,即数据块的长度为0。


    640?wx_fmt=jpeg


    在解析chunked编码时,按每块的长度将传输的内容进行拼接,直至块长为0的块即完成一个chunked编码的解析。如上图的图片,就仅一个0x158字节的数据块,它的第二块chunked就已经是0 ”了


    chunked编码很简单,是不是?


    不过,在协议还原的实现过程中,如何高效高性能地对chunked进行解码,是一件值得挑战的事哦。毕竟,HTTP的流量占比不小的。


    640?wx_fmt=jpeg

    长按进行关注。





  • 相关阅读:
    扯一下关于魔兽改键的蛋
    Emacs23.3在ubuntu10.10下的手动编译与安装
    GRUB2英文文档的部分翻译
    WinForm中Crossthread operation not valid错误的解决方法
    C# 嵌入式资源
    raster配准
    excel vba 玫瑰图 风速 风向
    使用UserControl好处
    How does ArcSDE use Oracle Spatial? arcsde怎么使用oracle spatial
    信息抽取的定义(definition of information extraction)
  • 原文地址:https://www.cnblogs.com/protosec/p/11673331.html
Copyright © 2020-2023  润新知