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. 【LeetCode】Game of Life(生命游戏)

    这道题是LeetCode里的第289道题. 题目描述: 根据百度百科,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在1970年发明的细胞自动机. 给定一个包含 m × n 个格子的面板,每一个格 ...

  2. NYOJ 104 最大和

    最大和 时间限制:1000 ms  |  内存限制:65535 KB 难度:5   描述 给定一个由整数组成二维矩阵(r*c),现在需要找出它的一个子矩阵,使得这个子矩阵内的所有元素之和最大,并把这个 ...

  3. tomcat在centos6+上的自启动脚本

    #!/bin/bash # # tomcat startup script for the Tomcat server # # chkconfig: 345 80 20 # description: ...

  4. 使用Unity做2.5D游戏教程(一)

    最近在研究Unity 3D,看了老外Marin Todorov写的教程很详细,就翻译过来以便自己参考,翻译不好的地方请多包涵. 如果你不了解2.5D游戏是什么,它基本上是个3D游戏而你可以想象是压扁的 ...

  5. NYOJ——239月老的难题(二分图最大匹配)

    月老的难题 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 月老准备给n个女孩与n个男孩牵红线,成就一对对美好的姻缘. 现在,由于一些原因,部分男孩与女孩可能结成幸福的一家, ...

  6. [BZOJ3378] [Usaco2004 Open]MooFest 狂欢节(树状数组)

    传送门 开2个树状数组 一个存的是下标,一个存的是数量 细节...看标称吧,懒得说了,好气啊 #include <cstdio> #include <iostream> #in ...

  7. Mybatis 如何自动生成bean dao xml 配置文件 generatorconfig.xml (main()方法自动生成更快捷)

    最近项目要用到mybatis中间件,中间涉及到要对表结构生成bean,dao,和sqlconfig.xml 所以记录一下学习过程 首先是准备工作,即准备需要的jar包:我们的数据库mysql,所以驱动 ...

  8. hdu4035 Maze (树上dp求期望)

    dp求期望的题. 题意: 有n个房间,由n-1条隧道连通起来,实际上就形成了一棵树, 从结点1出发,开始走,在每个结点i都有3种可能: 1.被杀死,回到结点1处(概率为ki) 2.找到出口,走出迷宫 ...

  9. App后台运行通知函数

    
[[UIApplicationsharedApplication] beginBackgroundTaskWithExpirationHandler: ^() { //程序在10分钟内未被系统关闭或 ...

  10. postman 快捷方式--启动图标

    下载,解压,安装,(此安装位置在/opt) 1.创建全局变量,也就是在任何地方都可以执行postman,不用去到安装目录,执行 : sudo ln -s /opt/postman/Postman /u ...