zoukankan      html  css  js  c++  java
  • 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的流量占比不小的。

  • 相关阅读:
    IIS和ASP.NET2.0
    VS.NET里关于不能够使用向导的问题
    CodeFile
    判断一个字符串是否全是数字的多种方法及其性能比较(C#实现)
    托管和非托管资源
    ASP.NET 2.0页面框架的几处变化
    导出QQWry.Dat中IP地址到文件[C#]
    面向对象在数据库应用程序中的应用(dotNet)
    如何取得IP/用户名等信息
    验证Email是否真正存在(上)
  • 原文地址:https://www.cnblogs.com/lidabo/p/13392615.html
Copyright © 2011-2022 走看看