HTTP协议之Transfer-Encoding
HTTP协议中的Transfer-Encoding
浏览器和服务器端支持持久连接
持久连接(Persist Connection)
HTTP1.0默认不是持久连接的
HTTP1.1默认是持久连接的
在HTTP请求和响应中加入Connection:KEEP-alive这个告诉对方当前tcp连接时持久连接的,
进行持久连接,可以减少客户端的等待时间,因为不使用持久连接,要尽心TCP的三次握手过程。
如果不想使用TCP的持久连接可以在HTTP头部加入connection:close,来告诉对方当前连接在客户端获取响应后,关闭TCP连接。
transfer-encoding:则是用来改变报文格式。
content-encoding:是HTTP实体内容进行编码,目的是优化传输,例如服务器端用gzip对响应实体尽心压缩,
并不是服务器端所有的信息都需要压缩处理,例如图片,已经是高度压缩过得了,就不用压缩了。压缩会浪费消耗CPU资源。
HTTP持久连接和非持久连接的区别:
①如果是HTTP是持久连接,如果服务器端返回数据没有实体内容的长度即(Content-length)则浏览器一直处于pending状态,
即一直等待状态。如果是非持久连接的话,不会出现这种情况。
这是因为,对于非持久连接,浏览器可以通知连接是否关闭来界定请求或者响应实体的边界;而对于持久连接,
这种方法显然不奏效。需要在响应中加入Content-length告诉浏览器当前响应结束。
由于Content-Length字段必须真实反映实体长度,但实际应用中,有些时候实体长度并没有那么好获得,例如实体
来自于网络文件,或者有动态语言生成。这时候要想获取长度,只能开一个足够打的buffer,等内容全部生成好再
计算。但这样做一方面需要更大的内容开销,另一方面也会让客户端等待更久。
我们在做web性能优化时,有一个重要的指标叫TTFB(TIME TO FIRST Byte),它代表的是从客户端发出请求到收到响应
的第一个字节所花费的时间。大部分;浏览器自带的network面板都可以看到这个指标,越短的TTFB意味着用户可以
越早看到页面内容,用户体验好。
可想而知,服务器端为了计算响应实体长度而缓存所有内容,跟更短的TTFB理念不一样。
但在HTTP报文中,实体一定要在头部之后,顺序不能颠倒,为此我们需要一个新的机制:不依赖头部的长度信息,
也能知道实体的边界。
Transfer-Encoding:chunked,利用分块传输
分跨传输相当简单,只需要在HTTP响应头中加入Transfer-Encoding:chunked,就代表这个报文采用了分块编码。
Keep-Alive: timeout=5, max=100(代表当前TCP连接可以保持5秒,这个TCP连接最多接受100个HTTP请求,超过100个就断开)
HTTP协议之Transfer-Encoding的更多相关文章
- HTTP协议(二):header标头说明
Header 解释 示例 Accept-Ranges 表明服务器是否支持指定范围请求及哪种类型的分段请求 Accept-Ranges: bytes Age 从原始服务器到代理缓存形成的估算时间(以秒计 ...
- HTTP协议及其请求头分析
HTTP协议及其请求头分析 HTTP协议及其请求头分析 众所周知,Internet的基本协议是TCP/IP协议,目前广泛采用的FTP.Archie Gopher等是建立在TCP/IP协议之上的应用 ...
- [转]HTTP协议及其请求头分析
众所周知,Internet的基本协议是TCP/IP协议,目前广泛采用的FTP.Archie Gopher等是建立在TCP/IP协议之上的应用层协议,不同的协议对应着不同的应用. WWW服务器使用 ...
- HTTP 协议的历史演变和设计思路
HTTP 协议是互联网的基础协议,也是网页开发的必备知识,最新版本 HTTP/2 更是让它成为技术热点. 本文介绍 HTTP 协议的历史演变和设计思路. 一.HTTP/0.9 HTTP 是基于 TCP ...
- HTTP协议:header标头说明
原文地址 http://blog.chinaunix.net/uid-7374279-id-4518834.html Header 解释 示例 Accept-Ranges 表明服务器是否支持指定范 ...
- HTTP协议header标头详解
本文根据RFC2616(HTTP/1.1规范),参考 http://www.w3.org/Protocols/rfc2068/rfc2068 http://www.w3.org/Protocols/r ...
- iOS-网络编程(一)HTTP协议
一. 网络编程基础 在移动互联网时代,几乎所有应用都需要用到网络,只有通过网络跟外界进行数据交互.数据更新,应用才能保持新鲜.活力.一个好的移动网络应用不仅要有良好的UI和良好的用户体验也要具备实时更 ...
- HTTP1.1协议中文版-RFC2616
转自:http://www.cnpaf.net/Class/HTTP/200811/23277.html 说明 本文档规定了互联网社区的标准组协议,并需要讨论和建议以便更加完善.请参考 “互联网官方协 ...
- HTTP协议发展介绍
HTTP协议工作于C/S架构上,是万维网服务器传输超文本到本地客户端的一种应用层协议,全称是:Hyper Text Transfer Protocol(超文本传输协议),HTTP是基于TCP/IP通信 ...
- HTTP协议篇(一):多工、数据流
管道机制.多工 管道机制(Pipelining) HTTP 1.1 引入了管道机制(Pipelining),即客户端可通过同一个TCP连接同时发送多个请求.如果客户端需要请求两个资源,以前的做法是在同 ...
随机推荐
- 2018年末--积极拥抱h5.转载 大前端时代来临,我们何去何从?
1.大前端时代是什么? 大前端时代是WEB统一的时代,利用html5或者6甚至7,不但可以开发传统的网站,做炫酷的网页动态效果,更可以采用BS架构应用程序.开发手机端web应用.移动端Native应用 ...
- IOS 简单的 加减分 动画
使用 shapeLayer 当动画层 其实以前有写过 类似的了 github: https://github.com/li6185377/AddScore self.pregress = [[CAS ...
- SpringBoot打war包并部署到外部tomcat运行(jar工程改造为正war工程)
如果你的SpringBoot工程是一个jar工程,而想把它改造成war工程,并打成war包放到外部的tomcat下运行,该怎么修改配置呢?这里以Maven工程为例进行介绍. (1)将pom.xml中的 ...
- d3实现的力向导图
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- Nginx配置WebService、MySQL、SQL Server、ORACLE等代理
首先介绍一下Nginx的基本使用: 注意不要直接双击nginx.exe,这样会导致修改配置后重启.停止nginx无效,需要手动关闭任务管理器内的所有nginx进程 在nginx.exe目录,打开命令行 ...
- oracle 回收表空间的数据文件大小
查看表空间的使用情况: " "used MB",b.bytes "free MB", ,) "percent_used" from ...
- 【iCore4 双核心板_ARM】例程二:读取ARM按键状态
实验原理: 按键的一端与STM32 PB9相连,另外一端接地,且PB9外接一个1K电阻大小的上拉电阻, 初始化时把PB9设置成输入模式,当按键弹起时,PB9由于上拉电阻的作用呈高电平(3.3V): 当 ...
- JS原生实现视频弹幕Demo(仿)
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...
- Spring Security 使用数据库用户进行认证
本文参考或摘录自:http://haohaoxuexi.iteye.com/blog/2157769 本文使用Spring Security自带的方式连接数据库对用户进行认证. 1.Spring Se ...
- Java知多少(72)文件的随机读写
Java.io 包提供了 RandomAccessFile 类用于随机文件的创建和访问.使用这个类,可以跳转到文件的任意位置读写数据.程序可以在随机文件中插入数据,而不会破坏该文件的其他数据.此外,程 ...