transfer-encoding:chunked的含义

2023-05-16

Transfer-Encoding: chunked 表示输出的内容长度不能确定,普通的静态页面、图片之类的基本上都用不到这个。

但动态页面就有可能会用到,但我也注意到大部分asp,php,asp.net动态页面输出的时候大部分还是使用Content-Length,没有使用Transfer-Encoding: chunked。

不过如果结合:Content-Encoding: gzip 使用的时候,Transfer-Encoding: chunked还是比较有用的。

记得以前实现:Content-Encoding: gzip 输出时,先把整个压缩后的数据写到一个很大的字节数组里(如 ByteArrayOutputStream),然后得到数组大小 -> Content-Length。

如果结合Transfer-Encoding: chunked使用,就不必申请一个很大的字节数组了,可以一块一块的输出,更科学,占用资源更少。

这在http协议中也是个常见的字段,用于http传送过程的分块技术,原因是http服务器响应的报文长度经常是不可预测的,使用Content-length的实体搜捕并不是总是管用。

          分块技术的意思是说,实体被分成许多的块,也就是应用层的数据,TCP在传送的过程中,不对它们做任何的解释,而是把应用层产生数据全部理解成二进制流,然后按照MSS的长度切成一分一分的,一股脑塞到tcp协议栈里面去,而具体这些二进制的数据如何做解释,需要应用层来完成,所以在这之前,一快整体应用层的数据需要等它分成的所有TCP  segment到达对方,重新组装后,应用程序才使用自己的解码方法还原它们。

   HTTP1.1采用了持久的连接,也就是一次TCP的连接不马上释放,允许许多的请求跟响应在一个TCP的连接上发送,所以客户机与服务器需要某种方式来标示一个报文在哪里结束和在下一个报文在哪里开始。简单的方法是使用呢content-length,但这只有当报文长度可以预先判断的时候才起作用,而对于动态的内容或者在发送数据前不能判定长度的情况下,可以使用分块的方法来传送编码。

如图:


Web服务器有时生成HTTPResponse无法在Header就确定消息大小的,这时一般来说服务器将不会提供Content-Length的头信息,而采用Chunked编码动态的提供body内容的长度。

进行Chunked编码传输的HTTP Response会在消息头部设置:

Transfer-Encoding: chunked

表示Content Body将用Chunked编码传输内容。

HTTP响应报文中的chunked

Chunked编码使用若干个Chunk串连而成,由一个标明长度为0的chunk标示结束。每个Chunk分为头部和正文两部分,头部内容指定下一段正文的字符总数(十六进制的数字)和数量单位(一般不写),正文部分就是指定长度的实际内容,两部分之间用回车换行(CRLF)隔开。在最后一个长度为0的Chunk中的内容是称为footer的内容,是一些附加的Header信息(通常可以直接忽略)。

HTTP响应报文中的chunked



这里面只有一个有意义的chunke以及一个footer。第一个chunk,头部是3134这两个字节,表示的是1和4这两个ascii字符,被http协议解释为十六进制数14,也就是十进制的20。后面紧跟0d0a,再接着是20个字节的chunk正文(图中的011e~0131)。

后面再接着0d0a,然后就是footer了,30表示ascii字符0,http解释为长度是0(也说明了这是最后一个chunk),后面紧跟0d0a,然后正文部分为空,再接0d 0a表示结束



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

transfer-encoding:chunked的含义 的相关文章

  • JLine 的编码问题

    Jline https github com jline jline3 issues是一个用于在用户按下之前在控制台拦截用户输入的模块Enter 它使用 JNA 或类似的魔法 我正在用它做一些实验 当我输入更多 异国情调 的 Unicode
  • 使用 Python 从原始帧创建 MPEG4 视频文件

    我有一个原始视频帧源 我可以在 Python 中访问它 我想用它创建一个 MPEG4 视频 并带有 MP3 背景音乐 Python 中有哪些类型的工具和库可用于此类任务 最好我想要一个 API 我可以为其提供输出文件名 然后将各个帧作为 2
  • 读外国文字

    我有一个包含英超足球运动员姓名的数据库 我正在将其读入 R 3 02 但当涉及到姓名中含有外来字符 元音变音 重音符号等 的球员时 我遇到了困难 下面的代码说明了这一点 PlayerData lt read table C Users Do
  • 在文本文件上书写时,重音符号和特殊字符无法正确显示

    这就是我正在做的事情 我在网站上进行网络爬虫以供个人使用 以复制文本并将书籍的章节设置为文本格式 然后使用另一个程序将其自动转换为 pdf 以将其放入我的云中 一切都很好 直到发生这种情况 特殊字符无法正确复制 例如重音在文本文件上显示为
  • 如何在PowerShell中从外部命令输出获取原始二进制数据?

    我在这里读到 当您在 powershell 中运行外部命令时 它们的输出始终被解释为字符串或字符串数 组 https stackoverflow com a 35980675 983442 https stackoverflow com a
  • JavaScript 中的奇怪字符导致其无法加载

    我的网站在本地主机上运行良好 我的 JavaScript 正在加载并运行良好 但是当我部署站点时 脚本不起作用 当我右键单击页面并说查看源代码 然后查看链接的脚本文件时 文件开头有一些奇怪的字符 函数 在本地主机上 我的脚本文件像这样开始
  • CKeditor 富文本编辑器在浏览器中显示 html 标签

    我刚刚在我正在构建的网站上安装了 CKeditor 富文本 WYSIWYG 编辑器 它似乎工作正常 除了它以编码 html 而不是常规 html 的形式将文本插入到我的 mysql 数据库中 然后当浏览器输出此内容时它将编码数据转换为常规
  • Python:UnicodeDecodeError:“utf8”编解码器无法解码字节

    我正在将一堆 RTF 文件读入 python 字符串中 在某些文本上 我收到此错误 Traceback most recent call last File 11 08 py line 47 in
  • Mysql2::错误:字符串值不正确

    我有一个在生产模式下运行的 Rails 应用程序 但是今天当用户尝试保存记录时突然出现此错误 Mysql2 Error Incorrect string value 更多详细信息 来自生产日志 Parameters utf8 gt lt 9
  • 将十六进制字节数组解码为特定代码页在随后编码时会产生错误结果

    我创建了一个简单的应用程序 如下所示 String stringValue new String new byte 0x00 0x00 0x00 0x25 273 byte valueEncoded Arrays copyOfRange s
  • 如何在PHP中设置文本文件编码?

    如何在 PHP 中设置文本文件编码 例如 UTF 8 让我告诉你我的问题 这是我的代码 Output fwrite 具有类似的输出 但是当我创建test txt通过记事本并设置字符集UTF 8输出就是我想要的 我想在 PHP 文件中设置字符
  • 带 % 的 Flask URL 参数未正确处理

    EDIT2 对于缺乏清晰度 我深表歉意 我将提供几个值 第一个是我使用前端应用程序调用的 URL 第二个是调用前的值urllib unquote 第三个是调用后的值urlib unquote 前端 console log http loca
  • MySQL 不将 ı 视为 i?

    我在 MySQL 5 7 27 中有一个用户表utf8mb4 unicode ci整理 不幸的是 没有像 i 那样进行线程化 以下查询将找不到Y lmaz select id from users where name Yilmaz 我对其
  • Python UTF-8转换问题

    在我的数据库中 我存储了一些 UTF 8 字符 例如 名称 字段中的 通过 Django ORM 当我读到这个时 我得到了类似的东西 gt gt gt p name u xce xb1 gt gt gt print p name 我本来希望
  • 为什么 Java BufferedReader() 不能正确读取阿拉伯文和中文字符?

    我正在尝试读取一个每行包含英文和阿拉伯字符的文件以及另一个每行包含英文和中文字符的文件 然而 阿拉伯文和中文的字符无法正确显示 它们只是显示为问号 知道我该如何解决这个问题吗 这是我用于阅读的代码 try String sCurrentLi
  • 与 Ruby 1.9.X 中的 Iconv.conv("UTF-8//IGNORE",...) 等效吗?

    我正在从远程源读取数据 偶尔会得到另一种编码的一些字符 它们并不重要 我想得到一个 最佳猜测 utf 8 字符串 并忽略无效数据 主要目标是获得一个我可以使用的字符串 并且不会遇到以下错误 编码 UndefinedConversionErr
  • Java中的字节和字符转换

    如果我将一个字符转换为byte然后回到char 那个角色神秘地消失了 变成了别的东西 这怎么可能 这是代码 char a line 1 byte b byte a line 2 char c char b line 3 System out
  • 适用于 .NET 2.0 的更精确的 PNG 库?

    是的 我正在使用 C 2 0 需要对 PNG 文件执行操作 例如使用自定义调色板 但我不知道如何使用 System Drawing 是否有第 3 方库 最好是兼容 GPL 的 可以对 PNG 编码进行更精细的控制 Update 我想做的事情
  • 在python中设置区域设置编码

    我通过以下方式从 python 代码调用 java 程序 subprocess check output java classpath Users feralvam Programas semanticvectors 3 4 semanti
  • 表单帖子上的 asp.net mvc 编码

    我在我的 asp net mvc 表单 带有文本区域的 nicedit 中使用富文本编辑器 当我在帖子上提交表单时 因为它不是 html 编码的 我收到以下消息 从客户端检测到潜在危险的 Request Form 值 如何对 post 上的

随机推荐

  • 用java做的一个小游戏—黑白反斗棋(适合菜鸟)

    用Java做的一个小游戏 xff0c 黑白反斗棋 xff0c 我玩过了5 5和10 10的 是学习之后做的 xff0c 不是自己原始开发的 import java awt Color import java awt FlowLayout i
  • 我的精神分裂——普通青年用二-B的方式走文艺的范儿

    一直以来都是以一种低沉的文笔在写些我的垃圾生活 xff0c 垃圾感想 xff0c 每次都会放那些特定的音乐 xff0c 那是一种心境 xff0c 那些音乐带着我的手在敲动 今天我想换种音乐 xff0c 猜猜我在放什么音乐 xff0c 很Hi
  • 读书随笔(1)——《计较是贫穷的开始》

    xff08 读书之后写感 xff0c 本该是读书之后自然的一个延续 xff0c 但我却很少这样了 xff0c 这不能说是一个极其坏的习惯 xff0c 虽不知道我究竟能不能改了 xff0c 但还是希望能尽可能的写写 xff0c 对自己想法有个
  • 2012年终随笔

    时至年终 xff0c 按我此前的惯例 xff0c 该写篇年终总结性的文章 xff0c 在之前末日说沸沸扬扬的时候 xff0c 我在想是否该早点写 xff0c 写个末日遗言什么的 xff0c 但还是没有写 xff0c 觉得如果真的末日来临 x
  • ath10k 出现ath10k_htt_t2h_msg_handler+0xebc/0x1efc解决方案

    问题log Fri Feb 21 20 08 34 2020 kern warn kernel nbsp 86 625786 WARNING CPU 0 PID 8 at openwrt 18 06 git build dir target
  • 解决第一次使用zookeeper闪退问题

    1 复制zookeeper 3 4 13 conf zoo sample cfg文件 xff0c 改名为zoo cfg 2 windows点击zookeeper 3 4 13 bin zkServer cmd命令启动zookeeper注册中
  • Android 11 update-api 遇到的问题

    1 缺少 非空判断 error log Missing nullability on method 96 getSecurityRestrictPwd 96 return MissingNullability import android
  • linux 文件 目录 默认权限

    结论 在linux系统中任何文件 目录都有一定的权限 xff0c 对于新创建的文件或目录 xff0c 也会有默认的访问权限 可能是出于安全的考虑 xff0c linux系统新建文件默认没有执行权限 xff0c 其最大权限为rw rw rw
  • centos 7 安装xfce 4桌面环境

    默认情况下 xff0c 完整安装的CentOS 7将安装GNOME图形用户界面 xff08 GUI xff09 xff0c 并且将在系统启动后加载 但是 xff0c 如果我们安装的CentOS没有安装GUI xff0c 那么我们总是可以稍后
  • Android 屏幕处于横屏状态 旋转180度界面切换显示

    span span public SreenOrientationListener mSreenOrientationListener span span mSreenOrientationListener 61 new SreenOrie
  • linux 桌面管理器 xfce 用户自动登录

    vi etc lightdm lightdm conf SeatDefaults autologin user 61 username 需要登录的用户名 autologin user timeout 61 delay
  • python 并行计算 pathos模块 简介

    目录 pathos模块 1 pathos自身的多进程方法 xff08 pathos multiprocessing ProcessPool pathos multiprocessing ProcessingPool pathos pools
  • 自然对数的底“e”的由来

    目录 一 神奇的 加减术 二 约翰 纳皮尔 xff08 John Napier xff09 的伟大贡献 发明对数 三 e在哪里 xff1f 是如何出现并逐步确认的呢 xff1f xff08 一 xff09 在制作对数表的过程中更加深入认识e
  • postgresql 报错 FATAL: no pg_hba.conf entry for host 未配置允许远程连接 解决方法

    目录 错误现象 问题原因 解决方案 1 进入到data目录下 xff0c 找到pg hba conf文件 2 修改文件 3 进入到postgres用户下 xff0c 执行命名 4 连接成功 错误现象 问题原因 这是在远程连接时pg hba
  • js javascript 解决 强制关注才能阅读

    问题现象 xff1a 强制关注 才能展开看文章 解决方法 xff1a chrome浏览器 打开文章网页 快捷键F12 然后切换到Console界面 复制一下代码回车 就可以阅读全部文章了 var article content 61 doc
  • linux 查看系统已安装内核

    目录 1 RHEL CentOS Fedora 2 Debian Ubuntu Linux Mint 3 SUSE openSUSE 4 Arch Linux 1 RHEL CentOS Fedora 在终端中执行如下命令查看已安装的 Li
  • win11 报错 你的IT管理员已经限制对此应用一些区域的访问 解决方法

    你的IT管理员已经限制对此应用一些区域的访问 你尝试访问的项目不可用 有关详细 请与你的IT支持人员联系 1 按下win 43 s xff0c 在框中输入cmd xff0c 右键管理员身份运行 2 在命令提示符中输入 reg add HKE
  • HTTPS和HTTP的区别

    什么是 HTTPS HTTPS 基于安全套接字层的超文本传输协议 或者是 HTTP over SSL 是一个 Netscape 开发的 Web 协议 你也可以说 xff1a HTTPS 61 HTTP 43 SSL HTTPS 在 HTTP
  • 正则表达式在线自动生成器

    正则表达式的强大众所周知 xff0c 它令程序员的头痛程度也数一数二的 最近我发现了一个网站 xff0c txt2re xff0c 能够自动为你生成正则表达式 xff0c 而且很灵活 xff0c 在这里推荐一下 网址 https www t
  • transfer-encoding:chunked的含义

    Transfer Encoding chunked 表示输出的内容长度不能确定 xff0c 普通的静态页面 图片之类的基本上都用不到这个 但动态页面就有可能会用到 xff0c 但我也注意到大部分asp php asp net动态页面输出的时