http 协议 通用信息头 Transfer-Encoding: chunked

client 向server发送请求与 server向client向返回响应,在消息头当中均可以包含

Transfer-Encoding: chunked

作用:描述消息实体的长度

有什么用:

消息的实体长度在发送之前不方便确定的时候,可以使用此参数,如果方便确定直接使用

Content-Length:就可以了,

怎么样使用:

Transfer-Encoding:chunked 针对于实体的消息格式

第i块大小\r\nxxxxxxxx块的数据\r\n第i+1块大小\r\nxxxxxx块的数据\r\n0\r\n\r\n

注意:

1. 块的大小描述所占用的字节个数是不固定的,可以是一个字节,二个字节或多个字节。

【参考】

HTTP chunked编码数据流解析算法

https://my.oschina.net/ososchina/blog/666761

HTTP chunked transfer

http://stackoverflow.com/questions/15115069/http-chunked-transfer
    /** Send some data to the server, HTTP/1.1 chunked style. */
    public void send(String chunkData) throws IOException {
        byte[] chunkBytes = chunkData.getBytes(ENCODING);
        String hexChunkLength = Integer.toHexString(chunkBytes.length);
        StringBuffer outputBuffer = new StringBuffer();
        outputBuffer.append(hexChunkLength);
        outputBuffer.append(DELIMITER);
        outputBuffer.append(chunkData);
        outputBuffer.append(DELIMITER);
        byte[] outputBytes = outputBuffer.toString().getBytes(ENCODING);
        outputStream.write(outputBytes);
        outputStream.flush();

        outputBuffer = new StringBuffer();
        outputBuffer.append("0");
        outputBuffer.append(DELIMITER);
        outputBuffer.append(DELIMITER);
        outputBytes = outputBuffer.toString().getBytes(ENCODING);
        outputStream.write(outputBytes);
        outputStream.flush();
    }

Http 响应头中Transfer-Encoding: chunked

http://blog.csdn.net/leokelly001/article/details/43233027

在http 的响应头中有时会见到这样的字段:Transfer-Encoding: chunked,这是一种分段传输数据的方式。如果对此格式不了解,直接将响应体以某一编码转换成字符串,就会出现乱码。result = new String(data, "utf-8");data为接受的数据。

分块传输编码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结尾。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值