当客户端向服务器请求一个静态页面或者一张图片时,服务器可以很清楚的知道内容大小,然后通过Content-Length消息首部字段告诉客户端需要接收多少数据。但是如果是动态页面等时,服务器是不可能预先知道内容大小,这时就可以使用Transfer-Encoding:chunk模式来传输数据了。即如果要一边产生数据,一边发给客户端,服务器就需要使用"Transfer-Encoding: chunked"这样的方式来代替Content-Length。

在进行chunked编码传输时,在回复消息的头部有Transfer-Encoding: chunked

编码使用若干个chunk组成,由一个标明长度为0的chunk结束。每个chunk有两部分组成,第一部分是该chunk的长度,第二部分就是指定长度的内容,每个部分用CRLF隔开。在最后一个长度为0的chunk中的内容是称为footer的内容,是一些没有写的头部内容。

chunk编码格式如下:
[chunk size][\r\n][chunk data][\r\n][chunk size][\r\n][chunk data][\r\n][chunk size = 0][\r\n][\r\n]
chunk size是以十六进制的ASCII码表示,比如:头部是3134这两个字节,表示的是1和4这两个ascii字符,被http协议解释为十六进制数14,也就是十进制的20,后面紧跟[\r\n](0d 0a),再接着是连续的20个字节的chunk正文。chunk数据以0长度的chunk块结束,也就是(30 0d 0a 0d 0a)。

简介

分块传输编码
分块传输编码(Chunked transfer encoding)是超文本传输协议(HTTP)中的一种数据传输机制,允许HTTP由网页服务器发送给客户端应用( 通常是网页浏览器)的数据可以分成多个部分。分块传输编码只在HTTP协议1.1版本(HTTP/1.1)中提供。
通常,HTTP应答消息中发送的数据是整个发送的,Content-Length消息头字段表示数据的长度。数据的长度很重要,因为客户端需要知道哪里是应答消息的结束,以及后续应答消息的开始。然而,使用分块传输编码,数据分解成一系列数据块,并以一个或多个块发送,这样服务器可以发送数据而不需要预先知道发送内容的总大小。通常数据块的大小是一致的,但也不总是这种情况。

原理与好处

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

HTTP分块传输编码允许服务器为动态生成的内容维持HTTP持久链接。通常,持久链接需要服务器在开始发送消息体前发送Content-Length消息头字段,但是对于动态生成的内容来说,在内容创建完之前是不可知的。

分块传输编码允许服务器在最后发送消息头字段。对于那些头字段值在内容被生成之前无法知道的情形非常重要,例如消息的内容要使用散列进行签名,散列的结果通过HTTP消息头字段进行传输。没有分块传输编码时,服务器必须缓冲内容直到完成后计算头字段的值并在发送内容前发送这些头字段的值。

HTTP服务器有时使用压缩 (gzip或deflate)以缩短传输花费的时间。分块传输编码可以用来分隔压缩对象的多个部分。在这种情况下,块不是分别压缩的,而是整个负载进行压缩,压缩的输出使用本文描述的方案进行分块传输。在压缩的情形中,分块编码有利于一边进行压缩一边发送数据,而不是先完成压缩过程以得知压缩后数据的大小。

格式

如果一个HTTP消息(请求消息或应答消息)的Transfer-Encoding消息头的值为chunked,那么,消息体由数量未定的块组成,并以最后一个大小为0的块为结束。每一个非空的块都以该块包含数据的字节数(字节数以十六进制表示)开始,跟随一个CRLF (回车及换行),然后是数据本身,最后块CRLF结束。在一些实现中,块大小和CRLF之间填充有白空格(0x20)。最后一块是单行,由块大小(0),一些可选的填充白空格,以及CRLF。最后一块不再包含任何数据,但是可以发送可选的尾部,包括消息头字段。消息最后以CRLF结尾。

[chunk size][\r\n][chunk data][\r\n][chunk size][\r\n][chunk data][\r\n][chunk size = 0][\r\n][\r\n]

计算机网络 - chunk协议相关推荐

  1. 吐血整理《计算机网络五层协议之物理层(下)》

    吐血整理<计算机网络五层协议之物理层(上)> 吐血整理<计算机网络五层协议之物理层(中)> 绝知此事要躬行! 物理层(下篇) 1.数字传输系统 1.1PCM的基本原理 1.2 ...

  2. 吐血整理《计算机网络五层协议之物理层(中)》

    吐血整理 <计算机网络 五层协议之物理层(上)> 吐血整理 <计算机网络 五层协议之物理层(下)> 物理层(中篇) 1.信道的基本概念(续) 1.1信道的极限容量 1.2.信道 ...

  3. 计算机网络地址解析协议实验,计算机网络地址解析协议(ARP)实验报告.doc

    计算机网络地址解析协议(ARP)实验报告 实验目的: 1. 掌握ARP协议的报文格式 2. 掌握ARP协议的工作原理 3. 理解ARP高速缓存的作用 4. 掌握ARP请求和应答的实现方法 5. 掌握A ...

  4. 计算机网络——IP协议基础原理

    摘要 IP协议提供的一种统一的地址格式.它为互联网上的每一个网络和主机分配一个逻辑地址所以IP地址也叫逻辑地址,用来屏蔽物理地址的差异,MAC地址每一个机器都有一个编码.IP地址是32位二进制数据分为 ...

  5. 计算机网络——HTTP协议原理

    摘要 在日常的开发中,很多开发的同学可能很少了解的HTTP协议的底层原理.HTTP协议的底层涉及到请求响应模型,HTTP的工作流程.cookie和session的原理等.本博文主要介绍计算机网络中HT ...

  6. 计算机网络——ARP协议(地址解析)原理

    摘要 地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议.主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的 ...

  7. 计算机网络——ARQ协议(自动重传请求)原理

    摘要 自动重传请求(Automatic Repeat-reQuest,ARQ)是OSI模型中数据链路层和传输层的错误纠正协议之一.它通过使用确认和超时这两个机制,在不可靠服务的基础上实现可靠的信息传输 ...

  8. 计算机网络三要素?计算机网络的协议三要素?

    计算机网络三要素:计算机设备.通信线路和连接设备.网络协议 计算机网络的协议三要素:"语法.语义.规则 ". 计算机网络的组成=网络硬件+网络软件 网络硬件=服务器.客户机+网络中 ...

  9. 计算机网络划分子网实验报告,计算机网络ip协议实验报告范文

    计算机网络ip协议实验报告范文 一.实验目的 1. 掌握几种常用的网络命令,通过使用这些命令能检测常见网络故障 2. 理解各命令的含义,并能解释其显示内容的意义 二.实验内容 1. 运行 Window ...

最新文章

  1. 【廖雪峰python入门笔记】list添加元素_append()和insert()
  2. .sql文件如何执行_深入理解SQL原理:SQL查询语句是如何执行的?
  3. 【数理知识】第9章-树-《离散数学及其应用》Kenneth H. Rosen
  4. 一个封锁操作被对 wsacancelblockingcall 的调用中断_操作系统概论
  5. FreeSql (二十二)Dto 映射查询
  6. Linux系统文件误删除恢复方法;宿主机windows与Linux文件共享!
  7. 互联网运营数据分析(2):转化分析
  8. Vue中使用Video标签播放 <解析后的短视频>去水印视频无响应
  9. 一图看清美国最具前景的50家人工智能公司
  10. SageMath的使用
  11. 如何处罚被客户投诉的项目经理?
  12. python3编写人工智能_人工智能学习第三章 编写第一个Python程序 及概念
  13. Java工程师简历范文大学生,最全Java知识总结
  14. 每日一犬 · 中国冠毛犬
  15. 33个高能CSS选择器让我受益匪浅
  16. 没有了剪辑和台本,papi酱为何要“强行”直播
  17. 深挖Cerebras:世界上最大AI芯片的架构设计
  18. matlab数字图像实验报告,数字图像处理实验报告(matlab)
  19. 【Arduino】编码器OMRON E6B2-CWZ6C
  20. 2022年12月1日起,OCS将停止接受GOTS的原料投入

热门文章

  1. 一阶IIR数字滤波器的设计
  2. 35岁没有技能转行做什么工作岗位好?
  3. leetcode/字符串交织,s1和s2字符串交织组成s3
  4. Linux运维技术之详解任务计划(crontab命令)
  5. EE308_Lab1
  6. python对参数二值化处理_OpenCV自适应阀值二值化表格检测方法(python版)
  7. iOS-OC-3DES加密和解密
  8. week 9 A目录
  9. HTML+CSS+JS制作一个生日祝福网站(程序员专属情人节表白网站)
  10. UCOSIII任务调度和任务切换