首页 > 其他分享 >(转载)Transfer-Encoding:chunked详解

(转载)Transfer-Encoding:chunked详解

时间:2023-04-17 22:58:13浏览次数:44  
标签:编码 HTTP 分块 Transfer Encoding 发送 传输 消息 chunked

原文链接:Transfer-Encoding:chunked详解_transfer-encoding: chunked_公众号:流花鬼的博客-CSDN博客

概念

分块传输编码(Chunked transfer encoding)是超文本传输协议(HTTP)中的一种数据传输机制,允许 HTTP 由网页服务器发送给客户端应用( 通常是网页浏览器)的数据可以分成多个部分。分块传输编码只在 HTTP 协议 1.1 版本(HTTP/1.1)中提供。

通常,HTTP 应答消息中发送的数据是整个发送的,Content-Length 消息头字段表示数据的长度。数据的长度很重要,因为客户端需要知道哪里是应答消息的结束,以及后续应答消息的开始。然而,使用分块传输编码,数据分解成一系列数据块,并以一个或多个块发送,这样服务器可以发送数据而不需要预先知道发送内容的总大小。通常数据块的大小是一致的,但也不总是这种情况。

原理

HTTP 1.1 引入分块传输编码提供了以下几点好处:

  1. HTTP 分块传输编码允许服务器为动态生成的内容维持 HTTP 持久链接。通常,持久链接需要服务器在开始发送消息体前发送 Content-Length 消息头字段,但是对于动态生成的内容来说,在内容创建完之前是不可知的。
  2. 分块传输编码允许服务器在最后发送消息头字段。对于那些头字段值在内容被生成之前无法知道的情形非常重要,例如消息的内容要使用散列进行签名,散列的结果通过 HTTP 消息头字段进行传输。没有分块传输编码时,服务器必须缓冲内容直到完成后计算头字段的值并在发送内容前发送这些头字段的值。
  3. HTTP 服务器有时使用压缩 (gzip 或 deflate)以缩短传输花费的时间。分块传输编码可以用来分隔压缩对象的多个部分。在这种情况下,块不是分别压缩的,而是整个负载进行压缩,压缩的输出使用本文描述的方案进行分块传输。在压缩的情形中,分块编码有利于一边进行压缩一边发送数据,而不是先完成压缩过程以得知压缩后数据的大小。

格式

如果一个 HTTP 消息(请求消息或应答消息)的 Transfer-Encoding 消息头的值为 chunked,那么,消息体由数量未定的块组成,并以最后一个大小为 0 的块为结束。

每一个非空的块都以该块包含数据的字节数(字节数以十六进制表示)开始,跟随一个 CRLF (回车及换行),然后是数据本身,最后块以 CRLF 结束。在一些实现中,块大小和 CRLF 之间填充有白空格(0x20)。

最后一块是单行,由「块大小(0)、一些可选的填充白空格、以及 CRLF 」组成。最后一块不再包含任何数据,但是可以发送可选的尾部,包括消息头字段。

消息最后以 CRLF 结尾。

编码的应答

HTTP/1.1 200 OK
Content-Type: text/plain
Transfer-Encoding: chunked
 
25
This is the data in the first chunk
 
1C
and this is the second one
 
3
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)

应答需要以 0 长度的块( "0\r\n\r\n".)结束。

解码的数据

This is the data in the first chunk
and this is the second one
consequence

标签:编码,HTTP,分块,Transfer,Encoding,发送,传输,消息,chunked
From: https://www.cnblogs.com/hyacinthLJP/p/17327833.html

相关文章

  • Pod Init Error: "force_encoding': can't modify frozen String (FrozenError)"
    热烈欢迎,请直接点击!!!进入博主AppStore主页,下载使用各个作品!!!注:博主将坚持每月上线一个新app!!!我发现使用Xcode14新创建的新项目有这个问题,可以按照图中操作切换为Xcode13,解决此问题。......
  • Transformer之Positional encoding
    1.前言我在学习NLP的时候,围绕着我不懂得技术点,逐个击破,以此期望能够把各个模块理解的更深入,使我在今后的学习中,能够更深入的分析,让自己更通透。接下来切入正题,介绍下Transformer中需要使用的Positionalencoding,它主要为Transformer这种并行计算模型,难以理解输入句子的语序而针对......
  • One Hot Encoding
    OneHotEncodingonemethodconvertingcategoricalvariablestoconvenientvariables(e.g.0-1)usingdummyvariablesPandasGetdummycolumnsdummies=pd.get_dummies(df.town)merged=pd.concat([df,dummies],axis='columns')Droponeofthe......
  • 直播电商平台开发,用el-checkout-group实现穿梭框el-transfer效果
    直播电商平台开发,用el-checkout-group实现穿梭框el-transfer效果一:页面构建 <el-form-itemlabel="选择模块:"prop="pubTime">  <divclass="app-select">   <divclass="list">    <el-inputv-model="searchWord&qu......
  • SyntaxError: Non-UTF-8 code starting with ‘\xb2‘ in file xxx.py but no encodi
    openCV系列文章目录文章目录openCV系列文章目录前言一、问题原因二、解决办法1.点击“运行按钮”->RunPythonfile前言#coding=gbkimportcv2importnumpyasnpdefmouse_callback(event,x,y,flags,userData):print(event,x,y,flags,userData)#mouse_callb......
  • Transferwise:以最快的速度最少的费用为你提供国际转账服务
    是否觉得国际转账银行有时高得离谱,大概这个地球上没有一个觉得银行的货币兑换收费低的吧,除非你在银行工作。但是,创业公司Transferwise就能将这个转账费用降到很低。产品公......
  • 【Visual Leak Detector】配置项 ReportEncoding
    说明使用VLD内存泄漏检测工具辅助开发时整理的学习笔记。本篇介绍VLD配置文件中配置项ReportEncoding的使用方法。同系列文章目录可见《内存泄漏检测工具》目录......
  • 密码学SAT入门文献03——Encoding Cryptographic Functions to SAT Using TRANSALG Sy
    AlgebraicandLogicSolvingMethodsforCryptanalysis AbstractInthispaperweproposethetechnologyforconstructingpropositionalencodingsofdiscr......
  • 临时上传服务器搭建 transfer.sh
    https://github.com/dutchcoders/transfer.shtransfer.sh   Easyandfastfilesharingfromthecommand-line.Thiscodecontainstheserverwitheverythingyo......
  • Deep Transfer Learning综述阅读笔记
    这是一篇linkedin发表的深度迁移学习综述,里面讲了一些对于search/recommendsystem中的迁移学习应用.有不少指导性的方法,看完后摘录出来对于ranking方向的TL,主要有......