• 非持久HTTP连接(non-persistent HTTP)是在http/1.0中定义
  • 持久HTTP连接(persistent HTTP)是在http/1.1中定义,其默认带流水线

非持久HTTP连接

某网页由最基本的 HTML 和10个JPEG 图像构成,10个JPEG 图像文件存放在同一台服务器中。如果用户请求该网页并采用“非持久连接”,那么在HTTP 客户(通常是用户浏览器)和服务器之间将发生以下操作:

  1. HTTP 客户端初始化一个与服务器主机www.server.com中的HTTP服务器的TCP 连接。服务器使用默认端口80监听来自HTTP客户的建立连接请求。
  2. HTTP客户端经由与TCP关联的本地Socket发出一个HTTP请求消息(Request)。这个消息中包含路径名 …/index.html。
  3. HTTP服务器经由与TCP关联的本地Socket接收到这个请求消息,再从服务器主机的内存或者硬盘中取出文件 …/index.html,经由同一Socket向 HTTP客户端发送包含该文件的响应消息 (Response Message)。
  4. HTTP服务器通知TCP服务层关闭这个TCP连接;TCP服务层并不立即关闭这个连接,而是在客户收到刚才那个响应消息后才会真正终止这个连接。
  5. HTTP客户端经由同一 Socket 接收这个响应消息 (Response Message)。TCP连接随后终止。客户端所收到的消息中封装了客户端所请求的 HTML文件。客户端浏览器从中取出这个文件,加以分析后发现这个文件中还有有10个JPEG对象引用。
  6. 对每个引用到的JPEG对象重复步骤1~4。

上述步骤之所以称为使用非持久连接,原因是每次服务器发送一个对象后相关的TCP连接就被关闭,也就是说每个连接没有持续到可以传输其他对象。每个TCP连接只能传送一个请求消息和响应消息。就上述例子,用户请求的那个Web页面就产生了11个TCP连接(1个网页请求连接和10个图象请求连接)。
   
在上述的例子中,并没有明确指出客户是依次打开10 逐一取得每个 JPEG 对象,还是同时打开多个 TCP连接同时取得多个 JPEG 对象。实际上,现今的浏览器允许用户通过配置来控制并行连接的程度。大多数浏览器默认可以打开5~10个并行TCP连接,每个连接处理一个请求/响应事务。如果把并行连接数设置为1,那样的话这个传送 JPEG 的10个连接是串行建立的。使用并行连接可以缩短响应时间。

非持久连接缺点

  1. 客户要为每个待请求的对象建立并维护一个新得连接。对于每个连接,TCP 必须同时在客户端和服务器端分配 TCP 缓冲区,并维护 TCP 变量。对于有可能同时为来自数百个不同客户的请求提供服务的Web服务器来说,这会严重增加服务器的负担;
  2. 对每个对象请求都有2个 RTT 的响应延迟:一个 RTT 用于建立 TCP 连接,另一个 RTT 用于请求和接收对象;
  3. 每个对象都要经历 TCP 缓启动,因为每个TCP连接都要起始于 slow start 阶段。并行 TCP 连接的使用能够部分减轻 RTT 延迟和缓启动的影响。

持久HTTP连接

在持久连接情况下,服务器在发出响应后保持TCP连接继续打开着。同一客户/服务器之间的后续请求和响应可以通过这个连接传递。整个Web页面上,比如 1 个基本HTML和 10 个JPEG对象的页面,可以通过单个的持久TCP连接发送。甚至存放在同一个服务器中的多个Web页面也可以通过单个持久TCP连接发送。通常,HTTP服务器在某个连接闲置了一段时间后就关闭它,而这段时间通常是可以配置的。

流水线(Pipeline)

持久连接分为不带流水线(without pipeline)和带流水线(with pipeline)两个版本。

如果是无流水线的版本,那么客户只能在接收到前一个请求的响应后才会发送新的请求。这种情况下,Web页面所引用的每个对象(上例中的10个JPEG图像)都经历1个RTT延迟用于请求和接收该对象。于非持久连接中每个对象需要2个RTT相比,不带流水线的持久连接已经有所改善。不带流水线版本的另一个缺点是,服务器送出一个对象后开始等待下一个请求,而这个新的请求却不能马上到达。这段时间服务器资源便闲置了。带流水线的持久连接还能进一步降低响应延迟。

HTTP/1.1的默认模式是使用带流水线的持久连接。这种情况下,HTTP客户每遇到一个对象引用就立即发出一个请求,因而HTTP客户可以一个接一个连续发出各个引用对象的请求。服务器收到这些请求后,也可以一个接一个连续发送各个对象。如果所有的请求和响应都连续发送的,那么所有引用到的对象供给经历1个RTT延迟,而不是像不带流水线版本那样,每个引用都必须有1个RTT延迟。
与非持久连接相比,持久连接,无论是否带流水线降低了1个RTT延迟外,缓启动延迟也比较小。其原因在于既然各个对象都使用同一个TCP连接,服务器发送第一个对象后就不必再以一开始的缓慢速率发送后续对象了。

参考来源:http://ordinarysky.cn/zblog/post/persistentinhttp.html

计算机网络:非持久HTTP连接 VS 持久性HTTP 连接相关推荐

  1. mysql持久连接_持久性连接,短连接和连接池

    1.长连接在没有数据通信时,定时发送数据包,以维持连接状态,短连接在没有数据传输时直接关闭就行了 2.什么时候用长连接,短连接? 长连接主要用于在少数客户端与服务端的频繁通信,因为这时候如果用短连接频 ...

  2. 平安dms开发java_Spring DMS模板同步接收非持久用户消息丢失

    1.背景 我们正在评估Spring JMS并针对各种场景测试JMSTemplate - 队列,主题(持久,非持久) . 我们经历了 message loss for non-durable topic ...

  3. JMS学习(五)--ActiveMQ中的消息的持久化和非持久化 以及 持久订阅者 和 非持久订阅者之间的区别与联系...

    一,消息的持久化和非持久化 ①DeliveryMode 这是传输模式.ActiveMQ支持两种传输模式:持久传输和非持久传输(persistent and non-persistent deliver ...

  4. JMS学习(六)--提高非持久订阅者的可靠性 以及 订阅恢复策略

    一,非持久订阅者 和 实时消费消息 在这篇文章中区分了Domain为Pub/Sub.Destination为Topic时,消费者有两种:持久订阅者 和 非持久订阅者. 对于持久订阅者而言,只要订阅了某 ...

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

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

  6. 内连接(等值、非等值连接)、外连接(左外连接、右外连接、全连接)、自然连接、自连接

    目录 一.交叉连接(笛卡尔积) 二.内连接(等值.非等值连接) 三.外连接(左外连接.右外连接.全连接) 四.自然连接 五.自连接 一.交叉连接(笛卡尔积) 交叉联接返回左表中的所有行,左表中的每一行 ...

  7. mysql 什么时候用内连接_mysql显示内连接和隐式内连接的区别,什么时候非要用到显示内连接。...

    显式内连接就是使用inner join的办法,写起来复杂些 以windows版本mysql里自带的sakila数据库为例 显式内连接语法 select 字段名 from 表1 join 表2 on 连 ...

  8. 打开计算机网络自动连接,电脑网络自动连接如何设置

    电脑网络自动连接如何设置?宽带连接在基本电子和电子通讯是描述续号或者是电子线路包含或者是能够同时处理较宽的频率范围,它是一种相对的描述方式,频率的范围愈大,也就是频宽愈高时,传送资料相对增加.下面就由 ...

  9. 计算机网络连接在哪,本地连接在哪里找【四种方法】

    本地连接通常是在电脑需要进行有关网络操作时才会涉及到,很多人表示,在电脑禁用本地连接后,再想启动时却无法找到本地连接,或者是不能快速找到本地连接.那么,电脑的本地连接在哪里找呢?可能一些人知道,但是不 ...

  10. 计算机网络入门必读书籍 ——《网络是怎么连接的》

    网络是怎么连接的 探索之旅路线图 (1)浏览器向Web服务器发送请求. (2)Web服务器根据请求向浏览器发送响应. 浏览器和Web服务器之间传递请求和响应的机制: 由操作系统中的网络控制软件,以及交 ...

最新文章

  1. 清华 词向量库_word2vec 构建中文词向量
  2. 剑指offer_第7题_斐波那契数列
  3. android debug database 源码解析
  4. 图卷积网络是什么?(行为识别)
  5. SQL Server里那些我们应该知道的系统存储过程
  6. 图数据库之Pregel
  7. 使用Androidkiller编译APK文件时出现libpng error: Not a PNG file的错误
  8. 【SHOI2017】相逢是问候【扩展欧拉定理】【复杂度分析】【线段树】
  9. 单片机led闪烁代码_单片机、555实现LED闪烁电路
  10. JavaScript 的 switch 条件语句
  11. 微软拟禁用JIT提高Edge浏览器安全性
  12. CTR介绍,数据集往往为表格形式,训练集使用历史的日志数据,然后进行特征归一化、离散化和特征哈希等操作,最终一条训练集为一行多列的二分类任务。
  13. 建立 arm-linux 交叉编译环境
  14. 存储区域网络(SAN)
  15. php生成word并下载
  16. 某去哪网,JS逆向:★★★★
  17. 我原以为我不会伤心......
  18. 2021年秋招面经:上海禾赛提前批(FPGA设计)
  19. 正则表达式检测电子邮件_电子邮件中的垃圾邮件检测
  20. 读OpenSceneGraph快速入门指导(Paul Martz著王锐钱学雷译)有感

热门文章

  1. baep matlab,matlab实验指导书全文(简化).doc
  2. vue 文字无缝滚动_vue文字横向滚动公告
  3. Google 谷歌创业训练营2021展示日回顾
  4. python 控制鼠标滚轮_使用 python pyautogui实现鼠标键盘控制功能
  5. ZZULIOJ:1138: C语言合法标识符
  6. 数字孪生可视化管理平台的意义
  7. 基于MATLAB/GUI的自组网仿真平台,对比leach,ADOV协议
  8. 【BZOJ1814】Ural 1519 Formula 1 (插头dp)
  9. 芯片到uboot启动流程 :ROM → MLO(SPL)→ uboot.img
  10. 回归评价指标(MSE、RMSE、MAE、R-Squared、拟合优度)