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里大概规范了几项提高性能的手段:

  1. 持久连接 (keep-alive/persistent connection)
  2. 并行连接
  3. 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的长连接的更多相关文章

  1. 老李谈HTTP1.1的长连接

    老李谈HTTP1.1的长连接   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:9088214 ...

  2. 老李谈HTTP1.1的长连接 1

    老李谈HTTP1.1的长连接   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:9088214 ...

  3. 老李谈HTTP1.1的长连接 2

    HTTP1.1的长连接 但是HTTP1.1开始默认建立的是长连接,即一旦浏览器发起HTTP请求,建立的连接不会请求应答之后立刻断掉. 1. 一个复杂的具备很多HTTP资源的网页会建立多少TCP连接,如 ...

  4. HTTP的长连接和短连接

        本文总结&分享网络编程中涉及的长连接.短连接概念.     关键字:Keep-Alive,并发连接数限制,TCP,HTTP 一.什么是长连接 HTTP1.1规定了默认保持长连接(HTT ...

  5. HTTP的长连接和短连接——Node上的测试

        本文主要从实践角度介绍长.短连接在TCP层面的表现,借助Node.JS搭建后台服务,使用WinHTTP.Ajax做客户端请求测试,最后简单涉及WebSocket.     关键字:长连接.短连 ...

  6. HTTP长连接短连接

    一.什么是长连接 HTTP1.1规定了默认保持长连接(HTTP persistent connection ,也有翻译为持久连接),数据传输完成了保持TCP连接不断开(不发RST包.不四次握手),等待 ...

  7. HTTP协议中的长连接和短连接(keep-alive状态)

    什么是长连接 HTTP1.1规定了默认保持长连接(HTTP persistent connection ,也有翻译为持久连接),数据传输完成了保持TCP连接不断开(不发RST包.不四次握手),等待在同 ...

  8. HTTP的长连接(持久连接)和短连接

      HTTP的长连接和短连接 本文总结&分享网络编程中涉及的长连接.短连接概念. 关键字:Keep-Alive,并发连接数限制,TCP,HTTP 一.什么是长连接 HTTP1.1规定了默认保持 ...

  9. HTTP 的长连接和短连接

    一.什么是长连接 HTTP1.1规定了默认保持长连接(HTTP persistent connection ,也有翻译为持久连接),数据传输完成了保持TCP连接不断开(不发RST包.不四次握手),等待 ...

随机推荐

  1. 【php学习之路】微信公众帐号

          上个月开始学习php,算上中间放假的时间差不多有一个月了.这段时间呢,每天上班没事的时候不慌不忙的看下php,刚开始也只是看下php中文手册,看完一遍好像没什么感觉.于是就想啊,做个什么东 ...

  2. Leetcode 397.整数替换

    整数替换 给定一个正整数 n,你可以做如下操作: 1. 如果 n 是偶数,则用 n / 2替换 n.2. 如果 n 是奇数,则可以用 n + 1或n - 1替换 n.n 变为 1 所需的最小替换次数是 ...

  3. 微软.net一些类的源码

    地址:http://referencesource.microsoft.com/#mscorlib/system/collections/generic/dictionary.cs 关键字:refer ...

  4. 02-JSON

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  5. 【bzoj1109】[POI2007]堆积木Klo 动态规划+树状数组

    题目描述 Mary在她的生日礼物中有一些积木.那些积木都是相同大小的立方体.每个积木上面都有一个数.Mary用他的所有积木垒了一个高塔.妈妈告诉Mary游戏的目的是建一个塔,使得最多的积木在正确的位置 ...

  6. CentOS7下安装Docker-Compose No module named 'requests.packages.urllib3'

    在使用Docker的时候,有一个工具叫做  docker-compose,安装它的前提是要安装pip工具. 1.首先检查Linux有没有安装Python-pip包,直接执行 yum install p ...

  7. phoenixframework集成了所有自动化测试的思想的平台。mark一下。

    phoenixframework http://www.cewan.la/

  8. CodeForces 762D Maximum path

    http://codeforces.com/problemset/problem/762/D 因为是3*n很巧妙的地方是 往左走两步或更多的走法都可以用往回走以一步 并走完一列来替换 那么走的方法就大 ...

  9. golang-uuid

    uuid第三方库可以在github上找,我在这使用的是:github.com/satori/go.uuid PS:不知道哪里原因,使用go mod 管理包,下载的包和github上的不是完全一样,也特 ...

  10. HDU_4770 Lights Against Dudely 状压+剪枝

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4770 Lights Against Dudely Time Limit: 2000/1000 MS ( ...