分块编码(Transfer-Encoding: chunked)
https://www.cnblogs.com/xuehaoyue/p/6639029.html
参考链接:
HTTP 协议中的 Transfer-Encoding
分块传输编码
一、背景:
- 持续连接的问题:对于非持续连接,浏览器可以通过连接是否关闭来界定请求或响应实体的边界;而对于持续连接,这种方法显然不奏效。有时,尽管我已经发送完所有数据,但浏览器并不知道这一点,它无法得知这个打开的连接上是否还会有新数据进来,只能傻傻地等了。
- 用Content-length解决:计算实体长度,并通过头部告诉对方。浏览器可以通过 Content-Length 的长度信息,判断出响应实体已结束
- Content-length引入的新问题:由于 Content-Length 字段必须真实反映实体长度,但是对于动态生成的内容来说,在内容创建完之前,长度是不可知的。这时候要想准确获取长度,只能开一个足够大的 buffer,等内容全部生成好再计算。但这样做一方面需要更大的内存开销,另一方面也会让客户端等更久。
- 我们需要一个新的机制:不依赖头部的长度信息,也能知道实体的边界——分块编码(Transfer-Encoding: chunked)
二、分块编码(Transfer-Encoding: chunked)
- Transfer-Encoding,是一个 HTTP 头部字段(响应头域),字面意思是「传输编码」。最新的 HTTP 规范里,只定义了一种编码传输:分块编码(chunked)。
- 分块传输编码(Chunked transfer encoding)是超文本传输协议(HTTP)中的一种数据传输机制,允许HTTP由网页服务器发送给客户端的数据可以分成多个部分。分块传输编码只在HTTP协议1.1版本(HTTP/1.1)中提供。
- 数据分解成一系列数据块,并以一个或多个块发送,这样服务器可以发送数据而不需要预先知道发送内容的总大小。
- 具体方法
- 在头部加入 Transfer-Encoding: chunked 之后,就代表这个报文采用了分块编码。这时,报文中的实体需要改为用一系列分块来传输。
- 每个分块包含十六进制的长度值和数据,长度值独占一行,长度不包括它结尾的 CRLF(\r\n),也不包括分块数据结尾的 CRLF。
- 最后一个分块长度值必须为 0,对应的分块数据没有内容,表示实体结束。
- 例:
HTTP/1.1 200 OK
Content-Type: text/plain
Transfer-Encoding: chunked25\r\n
This is the data in the first chunk\r\n1C\r\n
and this is the second one\r\n3\r\n
con\r\n
8\r\n
sequence\r\n0\r\n
\r\n
- Content-Encoding 和 Transfer-Encoding 二者经常会结合来用,其实就是针对 Transfer-Encoding 的分块再进行 Content-Encoding压缩。
转载于:https://www.cnblogs.com/FineDay/p/10452421.html
分块编码(Transfer-Encoding: chunked)相关推荐
- 分块编码(Transfer-Encoding: chunked)VS Content-length
参考链接: HTTP 协议中的 Transfer-Encoding 分块传输编码 https://www.cnblogs.com/xuehaoyue/p/6639029.html 一.背景: 持续连接 ...
- HTTP中分块编码(Transfer-Encoding: chunked)
转自: 妙音天女--分块传输编码~ 参考链接: HTTP MDN--HTTP协议 一.背景: 持续连接的问题:对于非持续连接,浏览器可以通过连接是否关闭来界定请求或响应实体的边界:而对于持续连接,这种 ...
- php transfer-encoding: chunked,php – 使用chunked transfer encoding和gzip
我最近开始在我的网站上使用gzip,它在除Opera之外的所有浏览器上都起到了一种魅力作用,它给出了一个错误,即由于数据损坏而无法解压缩内容.从我可以从测试和谷歌搜索中收集到的,使用gzip和chun ...
- libcurl API 常用函数
libcurl 详参libcurl 1 curl_easy_getinfo CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ... ); 使 ...
- python爬虫入门教程--快速理解HTTP协议(一)
http协议是互联网里面最重要,最基础的协议之一,我们的爬虫需要经常和http协议打交道.下面这篇文章主要给大家介绍了关于python爬虫入门之快速理解HTTP协议的相关资料,文中介绍的非常详细,需要 ...
- 再谈HTTP2性能提升之背后原理—HTTP2历史解剖
即使千辛万苦,还是把网站升级到http2了,遇坑如<phpcms v9站http升级到https加http2遇到到坑>. 因为理论相比于 HTTP 1.x ,在同时兼容 HTTP/1.1 ...
- http请求丢部分数据_温故知新,HTTP/2
去年年底,据国际互联网工程任务组( IETF )消息,HTTP-over-QUIC 实验性协议将被重命名为 HTTP/3,即有望成为 HTTP 协议的第三个正式版本,也就是说HTTP/3可能要来了. ...
- 温故知新,HTTP/2
版权声明:本文为半吊子子全栈工匠(wireless_com,同公众号)原创文章,未经允许不得转载. https://blog.csdn.net/wireless_com/article/details ...
- app中的长连接与实现方式
http://mrpeak.cn/blog/http2/ --- 原文 http2.0的好处不仅仅是multiplexing,请求压缩,优先级控制,server push等等都是亮点. 解决连接 ...
最新文章
- scrapy 搜索关键字_Scrapy 新浪微博搜索爬虫
- Vue 的路由实现 Hash模式 和 History模式
- checkboxlist与数组结合用的技
- ECSHOP中transport.js和jquery的冲突的简单解决办法
- 走心地讨论一下,一个中国码农在硅谷求职的实用经历
- BZOJ2595: [Wc2008]游览计划(斯坦纳树,状压DP)
- 《Linux内核设计与实现》读书笔记 - 目录 (完结)【转】
- 火狐marquee_火狐不支持marquee解决方案
- 原子变量与非阻塞同步机制
- word转pdf组合的图片出现灰线,如何处理
- 李宏毅自然语言处理——指代消歧
- VUE使用echarts实现中国地图航线动态展示
- 【论文基本功】【LaTeX】公式及其编号
- IT定律之计算机行业发展规律——三大定律
- 我想去 河南省 郑州春苑置业有限公司 上班 待遇好不好
- My97date日期选择设置最大最小值
- 影集制作php源码_2018最新仿720全景在线制作云平台网站PHP源码(新增微信支付+打赏+场景红包+本地存储)...
- python实验报告及源代码-python满分实验报告:红心大战源代码源码程序
- 【成为架构师系列】领导力就是两件事:断物和识人
- 区块链中去中心化是什么意思?