分块编码(Transfer-Encoding:chunked)
参考链接:
HTTP 协议中的 Transfer-Encoding
分块传输编码
一、背景:
1.持续连接的问题:对于非持续连接,浏览器可以通过连接时否关闭来界定请求或响应实体的边界;而对于持续连接,这种方法显然不奏效。有时,尽管我已经发送完所有数据,但浏览器并不知道这一点,它无法得知这个打开的连接上是否还会有新数据进来,只能傻傻地等了。
2.用Content-Length解决:计算实体长度,并通过头部告诉对方。浏览器可以通过Content-Length的长度信息,判断出响应实体已结束。
3.Content-Length引入的新问题:由于Content-Length字段必须真实反映实体长度,但是对于动态生成的内容来说,在内容创建完之前,长度是不可知的。这时候要想准确获取长度,只能开一个足够大的buffer,等内容全部生成号再计算。但这样做一方面需要更大的内存开销,另一方面也会让客户端等更久。
4.我们需要一个新的机制:不依赖头部的长度信息,也能知道实体的边界----分块编码(Transfer-Encoding:chunked)
二、分块编码(Transfer-Encoding:chunked)
1.Transfer-Encoding,是一个HTTP头部字段(响应头域),字面意思是[传输编码]。最新的HTTP规范里,只定义了一种编码传输:分块编码(chunked)。
2.分块传输编码(Chunked transfer encoding)是超文本传输协议(HTTP)中的一种数据传输机制,允许HTTP由网页服务器发送给客户端的数据可以分成多个部分。分块传输编码只在HTTP协议1.1版本(HTTP/1.1)中提供。
3.数据分解成一系列数据块,并以一个或多个块发送,这样服务器可以发送数据而不需要预先知道发送内容的总大小。
4.具体方法
1).在头部加入Transfer-Encoding:chunked之后,就代表这个报文采用了分块编码。这时,报文中的实体需要改为用一系列分块来传输。
2).每个分块包含十六进制的长度值和数据,长度值独占一行,长度不包括它结尾的CRLF(\r\n),也不包括分块数据结尾的CRLF。
3).最后一个分块长度值必须为0,对应的分块数据没有内容,表示实体结束。
5.例子:
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\n8\r\n
sequence\r\n\0\r\n
\r\n
6.Content-Encoding和Transfer-Encoding二者经常会结合来用,其实就是针对Transfer-Encoding的分块在进行Content-Encoding压缩。
分块编码(Transfer-Encoding:chunked)相关推荐
- 分块编码(Transfer-Encoding: chunked)VS Content-length
参考链接: HTTP 协议中的 Transfer-Encoding 分块传输编码 https://www.cnblogs.com/xuehaoyue/p/6639029.html 一.背景: 持续连接 ...
- 分块编码(Transfer-Encoding: chunked)
https://www.cnblogs.com/xuehaoyue/p/6639029.html 参考链接: HTTP 协议中的 Transfer-Encoding 分块传输编码 一.背景: 持续连接 ...
- 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等等都是亮点. 解决连接 ...
最新文章
- pycharm 远程环境开发调试
- 阻止表中出现重复项——SQL UNIQUE 约束
- 为什么在JavaScript中0.1+0.2不等于0.3?
- 【JS】call,apply,bind
- 类似于QQ游戏百万人同时在线的服务器架构实现
- python 机器识别_用Python端对端数据分析识别机器人“僵尸粉”
- 一致性算法之Raft算法
- openstack ice自定义调度算法项目详解(horizon、novaclient、api、scheduler、db、自定义数据库)
- 今日参与会议后的感悟
- 基于JSP的物流信息管理系统(MySQL版)
- 不得不会的软件测试bug分析定位技巧
- LAME应用教学--HIFI级MP3制作之路
- HNUST - 数据库课设
- 自定义控件其实很简单2
- 《数据结构(C语言版)》笔记-1.1 什么是数据结构
- FFMPEG API函数根据SDP文件接收RTP媒体流
- BASE64编码的图片在网页中的显示问题
- MyC++基础知识补漏
- Indy IdTcpserver
- 1+X Web前端等级考证 | 2020 12月Web前端开发中级实操 (模拟试题第三套) 附答案
热门文章
- Java中System.setProperty()用法
- 洛谷——P1219 八皇后
- C语言 满分代码 L1-047 装睡(解题报告)
- mysql 记录所有操作_mysql 的一些记录的操作
- linux安装trac+svn+apache+wike,windos中Trac+apache+svn的安装与配置
- python常见内置函数_python常见的内置函数
- Java串口包Javax.comm的安装
- 异步通知和同步通知_CCF NOI 2020 网上同步赛报名通知
- 限制服务器访问指定网站,如何允许或限制某一国或地区的用户访问网站
- android新闻管理,Android资讯新闻类App(头条、网易等),频道管理集成之数据库存储...