http协议头中的Transfer_Encoding

http协议头中的Transfer_Encoding:

HTTP协议头字段Transfer_Encoding,分块传输编码,一般出现在http的响应头中。该头字段存在与HTTP协议的1.1版本中,提供一种数据传输机制。
通常http协议在传输数据时是整体一起发送的,数据体的长度由Content-Length字段指定,方便判断消息结束。

该响应头字段(Transfer_Encoding)的作用:

  1. 对于动态生成的应答内容来说,内容在未生成完成前总长度是不可知的。使用该响应头字段能解决响应请求前必须先计算响应体大小(Content-Length)的问题,填充Content-Length。
  2. 分块传输编码允许服务器在最后发送消息头字段。例如在头中添加散列签名。
  3. 对于压缩传输传输而言,可以一边压缩一边传输。

格式:

HTTP响应头中的Transfer-Encoding的值为chunked,响应的消息体的格式是由若干个块每个块包括块大小和实际数据内容中间由\r\n分割,块的大小使用十六进制表示,
块与块之间也由\r\n来分割最后一个块的大小为0,不包含任何数据,表明消息体发送结束。
,简而言之,chunked编码的基本方法是将大块数据分解成多块小数据,每块都可以自指定长度,其具体格式如下(BNF文法):

Chunked-Body   = *chunk            //0至多个chunk

last-chunk         //最后一个chunk

trailer            //尾部

CRLF               //结束标记符

chunk          = chunk-size [ chunk-extension ] CRLF

chunk-data CRLF

chunk-size     = 1*HEX

last-chunk     = 1*("0") [ chunk-extension ] CRLF

chunk-extension= *( ";" chunk-ext-name [ "=" chunk-ext-val ] )

chunk-ext-name = token

chunk-ext-val  = token | quoted-string

chunk-data     = chunk-size(OCTET)

trailer        = *(entity-header CRLF)

解释:
1.Chunked-Body表示经过chunked编码后的报文体。报文体可以分为chunk, last-chunk,trailer和结束符四部分。chunk的数量在报文体中最少可以为0,无上限;
2.每个chunk的长度是自指定的,即,起始的数据必然是16进制数字的字符串,代表后面chunk-data的长度(字节数)。这个16进制的字符串第一个字符如果是“0”,则表示chunk-size为0,该chunk为last-chunk,无chunk-data部分。
3.可选的chunk-extension由通信双方自行确定,如果接收者不理解它的意义,可以忽略。
4.trailer是附加的在尾部的额外头域,通常包含一些元数据(metadata, meta means “about information”),这些头域可以在解码后附加在现有头域之后

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值