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连接同时发送多个请求.如果客户端需要请求两个资源,以前的做法是在同 ...
随机推荐
- http_referer 白名单
valid_referers none blocked *.ttlsa.com server_names ~\.image\. ~\.baidu\.; if ($invalid_referer) { ...
- hello.cpp 第一个C++程序(本博客没有特指都是以QT测试)
操作步骤:1.文件->新建文件或项目(N)->New File or Project->Qt Console Application->Choose->“名称”中输入工程 ...
- 树莓派raspi2-ubuntu meta安装配置指导
首先是硬件准备: 1.树莓派raspi2B------------------------1 2.普通显示器----------------------------1 3.普通pc---------- ...
- C#获取文件版本信息
使用FileVersionInfo获取版本信息 FileVersionInfo info = FileVersionInfo.GetVersionInfo(Application.Current.St ...
- ffmpeg 移植到 android 并使用
同步更新至个人blog:http://dxjia.cn/2015/07/ffmpeg-porting-to-android/ 空闲做了个小应用,从视频里截图,然后再将截图拼接为一个gif动画: 起初使 ...
- recyclerView插入(add)和删除(remove)item后,item错乱,重复,覆盖在原recyclerView上
项目用到,实现一个recyclerView列表的item翻转动效,翻转的同时会将指定item置顶. (比如交换AB位置,A在0位置,指定的item B 在 i 位置) 原始使用的是插入B到0位置,然后 ...
- 修改Linux下的文件以及文件夹的权限
如何在Linux中管理文件和文件夹的权限? 2014-02-12 10:58 布加迪编译 51CTO 字号:T | T Linux系统有严格的权限管理制度,操作者权限与文件权限不匹配时将无法对文件进行 ...
- 关于Solaris 的磁盘的分区
也许是深受LINUX Windows fdisk 影响,每次看完Solaris的format命令,总是云里雾里.我今天总结一下,各位给点指点 一. Linux.Windows 传统的磁盘区层级, ...
- [转]iOS 中几种定时器 - 控制了时间,就控制了一切
这篇文章是转载内容,原文地址:http://www.cocoachina.com/ios/20150519/11857.html?utm_source=tuicool 这里的知识点,其实在我们日常开发 ...
- react如何监听路由url变化
"componentWillReceiveProps" "shouldComponentUpdate" "componentWillUpdate&qu ...