客户端发送请求后,服务器返回chunked编码的字节数组,现在要在客户端处理这些数据,问怎样在javascript中处理chunked编码啊?急用,麻烦各位了!

解决方案 »

  1.   

    chunked编码是什么编码?从来没有听过啊!是不是服务器端的压缩编码啊?那样的话需要浏览器去解压吧
      

  2.   

    我现在也不是很懂,只知道在客户端调用responseBody方法,服务器返回一系列字节数组,由于服务器返回的数据量特别大,所以它是一个chunk一个chunk返回给浏览器的,但浏览器这边能看到的只是一个字节数组,该怎样能知道总共有多少个chunk以及每个chunk中各是什么内容呢?
      

  3.   

    分块传输编码(Chunked transfer encoding)是超文本传输协议(HTTP)中的一种数据传输机制,允许HTTP由網頁伺服器发送给客户端应用( 通常是网页浏览器)的数据可以分成多个部分。分块传输编码只在HTTP协议1.1版本(HTTP/1.1)中提供。
    通常,HTTP应答消息中发送的数据是整个发送的,Content-Length消息头字段表示数据的长度。数据的长度很重要,因为客户端需要知道哪里是应答消息的结束,以及后续应答消息的开始。然而,使用分块传输编码,数据分解成一系列数据块,并以一个或多个块发送,这样服务器可以发送数据而不需要预先知道发送内容的总大小。通常数据块的大小是一致的,但也不总是这种情况。如果一个HTTP消息(请求消息或应答消息)的Transfer-Encoding消息头的值为chunked,那么,消息体由数量未定的块组成,并以最后一个大小为0的块为结束。
    每一个非空的块都以该块包含数据的字节数(字节数以十六进制表示)开始,跟随一个CRLF (回车及換行),然后是数据本身,最后块CRLF结束。在一些实现中,块大小和CRLF之间填充有白空格(0x20)。
    最后一块是单行,由块大小(0),一些可选的填充白空格,以及CRLF。最后一块不再包含任何数据,但是可以发送可选的尾部,包括消息头字段。
    消息最后以CRLF结尾。例子HTTP/1.1 200 OK
    Content-Type: text/plain
    Transfer-Encoding: chunked25
    This is the data in the first chunk1C
    and this is the second one3
    con
    8
    sequence
    0解码 示意
    "This is the data in the first chunk\r\n"      (37 字符 => 十六进制: 0x25)
    "and this is the second one\r\n"               (28 字符 => 十六进制: 0x1C)
    "con"                                          (3  字符 => 十六进制: 0x03)
    "sequence"                                     (8  字符 => 十六进制: 0x08)最终 结果
    This is the data in the first chunk
    and this is the second one
    consequenceJS的话应该是用调用XMLHttpRequest 对象发请求。如果服务器http响应200状态那么 XMLHttpRequest.responseText中应该是解好码的数据,不需在另外解码。