关于HTTP1.1的长连接
HTTP是一个构建在传输层的TCP协议之上的应用层的协议,在这个层的协议,是一种网络交互须要遵守的一种协议规范。
HTTP1.0的短连接
HTTP 1.0规定浏览器与server仅仅保持短暂的连接。浏览器的每次请求都须要与server建立一个TCP连接,server完毕请求处理后马上断开TCP连接,server不跟踪每一个客户也不记录过去的请求。这个过程大概能够描写叙述为:
1、建立连接:首先DNS解析过程。如把域名变成一个ip。假设url不包括port号,则会使用该协议的默认port号,HTTP协议的默认port号为80。然后三次握手建立一个TCP连接;
2、请求:连接成功后,開始向webserver发送请求。这个请求通常是GET或POST请求。
3、应答:webserver收到这个请求,进行处理。webserver会把文件内容传送给响应的web浏览器。包括:HTTP头信息,体信息。
4、关闭连接:当应答结束后,web浏览器与webserver必须四次握手断开连接,以保证其它web浏览器能够与webserver建立连接。
HTTP1.1的长连接
可是HTTP1.1開始默认建立的是长连接,即一旦浏览器发起HTTP请求,建立的连接不会请求应答之后立马断掉。
1、 一个复杂的具备非常多HTTP资源的网页会建立多少TCP连接,怎样使用这些连接?
2、 已经建立的TCP连接是否会自己主动断开。时间是多久?
对于第一个问题。如今浏览器都有最大并发连接数限制。应该说假设须要,就会尽量在同意范围内建立很多其它的TCP持久连接来处理HTTP请求,相同滴。一个TCP持久连接能够不断传输多个HTTP请求。可是假设上一个请求的响应还未收到,则不能处理下一个请求(Pipeling管道技术能够解决问题从而进一步提升性能),所以说非常多浏览器事实上都能够改动同意最大并发连接数以提升浏览网页的速度。
对于第二个问题。
问题在于server端对于长连接的实现,特别是在对长连接的维护上。
FTP协议及SMTP协议中有NOOP消息,这个就能够觉得是心跳报文。但HTTP协议没有相似的消息,这样server端仅仅能使用超时断开的策略来维护连接。
设想超时时间非常短。那么有效空暇时间就非常短。换句话讲:一旦链路上没有数据发送,server端非常快就关闭连接。
也就是说事实上HTTP的长连接非常easy在空暇后自己主动断开,一般来说这个时间是300s左右。
參考资料
=====================================================================
1、HTTP1.1提升性能的手段
著作权归作者全部。
商业转载请联系作者获得授权。非商业转载请注明出处。
作者:Saviio
链接:http://www.zhihu.com/question/36469741/answer/67608570
来源:知乎
HTTP1.1里大概规范了几项提高性能的手段:
- 持久连接 (keep-alive/persistent connection)
- 并行连接
- Pipelining
第一点之前已经说过了,所以不表。
第二点。由于现代网页通常包括了复数个(>=10)资源,而依照默认设定,一个连接中的每一个请求必须等待收到响应后才干发送下一个请求,所以假设复数的资源请求全部在一个连接one by one发送给server显然会非常慢,而为了弥补这一缺陷,浏览器一般会默认开启多个TCP连接,然后再依据每一个连接的状态在当中依次发送数据请求,并且client有权随意关闭超发的连接。各个浏览器同意的并行连接数大致是这样的(From SO):
Firefox 2: 2
Firefox 3+: 6
Opera 9.26: 4
Opera 12: 6
Safari 3: 4
Safari 5: 6
IE 7: 2
IE 8: 6
IE 10: 8
Chrome: 6
由于TCP协议本身有慢启动的特征,会随着时间调谐连接的最大速度,因此在现代浏览器中持久连接和并行连接通常是搭配在一起使用的—— 一方面由于持久连接的存在。每一个TCP连接已经处于调谐后的状态。还有一方面持久连接能够避免又一次三次握手的开销。
关于第三点,
依照HTTP1.1的描写叙述。还有种能够提升性能的方案是管道化。能够在一个连接中发送多个请求不必等待前一个请求返回。
但这项技术比較easy踩坑,所以主流面向用户的浏览器,这项技术是被默认关闭。
关于HTTP2:
HTTP2为了性能做了不少努力,比方提供了规范以支持连接的多路复用。
HTTP1.0须要加上keep-alive的请求首部。否则默认一个请求一个连接。
HTTP1.1之后keep-alive(持久连接)被默认启用,除非在响应中指定connection:close,否则webserver会假定全部连接都是持久的。
=====================================================================
,这将有助于提升打开站点的速度。
关于HTTP1.1的长连接的更多相关文章
- 老李谈HTTP1.1的长连接
老李谈HTTP1.1的长连接 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:9088214 ...
- 老李谈HTTP1.1的长连接 1
老李谈HTTP1.1的长连接 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:9088214 ...
- 老李谈HTTP1.1的长连接 2
HTTP1.1的长连接 但是HTTP1.1开始默认建立的是长连接,即一旦浏览器发起HTTP请求,建立的连接不会请求应答之后立刻断掉. 1. 一个复杂的具备很多HTTP资源的网页会建立多少TCP连接,如 ...
- HTTP的长连接和短连接
本文总结&分享网络编程中涉及的长连接.短连接概念. 关键字:Keep-Alive,并发连接数限制,TCP,HTTP 一.什么是长连接 HTTP1.1规定了默认保持长连接(HTT ...
- HTTP的长连接和短连接——Node上的测试
本文主要从实践角度介绍长.短连接在TCP层面的表现,借助Node.JS搭建后台服务,使用WinHTTP.Ajax做客户端请求测试,最后简单涉及WebSocket. 关键字:长连接.短连 ...
- HTTP长连接短连接
一.什么是长连接 HTTP1.1规定了默认保持长连接(HTTP persistent connection ,也有翻译为持久连接),数据传输完成了保持TCP连接不断开(不发RST包.不四次握手),等待 ...
- HTTP协议中的长连接和短连接(keep-alive状态)
什么是长连接 HTTP1.1规定了默认保持长连接(HTTP persistent connection ,也有翻译为持久连接),数据传输完成了保持TCP连接不断开(不发RST包.不四次握手),等待在同 ...
- HTTP的长连接(持久连接)和短连接
HTTP的长连接和短连接 本文总结&分享网络编程中涉及的长连接.短连接概念. 关键字:Keep-Alive,并发连接数限制,TCP,HTTP 一.什么是长连接 HTTP1.1规定了默认保持 ...
- HTTP 的长连接和短连接
一.什么是长连接 HTTP1.1规定了默认保持长连接(HTTP persistent connection ,也有翻译为持久连接),数据传输完成了保持TCP连接不断开(不发RST包.不四次握手),等待 ...
随机推荐
- hdu 4251 The Famous ICPC Team Again划分树入门题
The Famous ICPC Team Again Time Limit: 30000/15000 MS (Java/Others) Memory Limit: 32768/32768 K ( ...
- BZOJ 3209: 花神的数论题【数位dp】
Description 背景众所周知,花神多年来凭借无边的神力狂虐各大 OJ.OI.CF.TC …… 当然也包括 CH 啦.描述话说花神这天又来讲课了.课后照例有超级难的神题啦…… 我等蒟蒻又遭殃了. ...
- [JSOI2007] 祖玛 (区间DP)
题目描述 这是一个流行在Jsoi的游戏,名称为祖玛. 精致细腻的背景,外加神秘的印加音乐衬托,彷佛置身在古老的国度里面,进行一个神秘的游戏——这就是著名的祖玛游戏.祖玛游戏的主角是一只石青蛙,石青蛙会 ...
- 【单调队列】bzoj 1407 [HAOI2007]理想的正方形
[题意] 给定一个n*m的矩阵,求所有大小为k*k的正方形中(最大值-最小值)的最小值 [思路] 先横着算出每一行的长度为k的窗口内的最大值,变成一个n*(m-k+1)的矩阵mx 再竖着算出每一列的长 ...
- 【2018.11.22】CTSC2018(模拟赛!)
太蠢了……$noip$ 后第一次模拟赛竟然是这样的……完全就是打击自信 / 降智…… 1. 假面 一道神仙概率 $dp$!第一次写…… 拿到题就发现血量 $m_i$ 的上限只有 $100$! 然后 $ ...
- oracle 当中,(+)是什么意思
SELECT A.id, B.IDDFROM A, BWHERE A.id(+)=B.IDD等价于SELECT A.id, B.IDDFROM A RIGHT OUTER JOIN B ON ( A. ...
- LA 并查集路径压缩
题目大意:有n个节点,初始时每个节点的父亲节点都不存在.有两种操作 I u v:把点节点u的父亲节点设为v,距离为|u-v|除以1000的余数.输入保证执行指令前u没有父亲节点. E u:询问u到根节 ...
- npm start 修改启动端口的不同方式
antd的启动配置文件基于package.json文件,配合roadhog使用时,启动配置是: "scripts": { "start": "road ...
- Spring 详解(二)------- AOP关键概念以及两种实现方式
目录 1. AOP 关键词 2. AOP 的作用 3. AOP 的通知类型 4. 基于 xml 的配置方式 5. 基于注解的配置方式 6. 切面的优先级 7. 重用切点表达式 8. 两种方式的比较(摘 ...
- IntelliJ IDEA常用的快捷键(代码提示/注释代码/加入类注释和方法注释Javadoc)
说明:IDEA的快捷键非常的多,但是下面这几种快捷键应该是最常用到的. 一.代码提示: [Ctrl]+[空格] 这个通常会与输入法开关冲突,解决方法是屏蔽输入法开关. 二.注释: 1.单行:[Ctrl ...