计算机网络:非持久HTTP连接 VS 持久性HTTP 连接

2024-01-22 05:08

本文主要是介绍计算机网络:非持久HTTP连接 VS 持久性HTTP 连接,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • 非持久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 连接的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/631924

相关文章

W外链微信推广短连接怎么做?

制作微信推广链接的难点分析 一、内容创作难度 制作微信推广链接时,首先需要创作有吸引力的内容。这不仅要求内容本身有趣、有价值,还要能够激起人们的分享欲望。对于许多企业和个人来说,尤其是那些缺乏创意和写作能力的人来说,这是制作微信推广链接的一大难点。 二、精准定位难度 微信用户群体庞大,不同用户的需求和兴趣各异。因此,制作推广链接时需要精准定位目标受众,以便更有效地吸引他们点击并分享链接

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点:弱密码字典爆破 四种方法:   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 访问环境 老规矩,我们先查看源代码

Java 连接Sql sever 2008

Java 连接Sql sever 2008 /Sql sever 2008 R2 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class TestJDBC

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP        我们在网络的应用层中可以自己定义协议,但是,已经有大佬定义了一些现成的,非常好用的应用层协议,供我们直接使用,HTTP(超文本传输协议)就是其中之一。        在互联网世界中,HTTP(超文本传输协议)是一个至关重要的协议,他定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或者传输超文本(比如HTML文档)。

实例:如何统计当前主机的连接状态和连接数

统计当前主机的连接状态和连接数 在 Linux 中,可使用 ss 命令来查看主机的网络连接状态。以下是统计当前主机连接状态和连接主机数量的具体操作。 1. 统计当前主机的连接状态 使用 ss 命令结合 grep、cut、sort 和 uniq 命令来统计当前主机的 TCP 连接状态。 ss -nta | grep -v '^State' | cut -d " " -f 1 | sort |

如何确定 Go 语言中 HTTP 连接池的最佳参数?

确定 Go 语言中 HTTP 连接池的最佳参数可以通过以下几种方式: 一、分析应用场景和需求 并发请求量: 确定应用程序在特定时间段内可能同时发起的 HTTP 请求数量。如果并发请求量很高,需要设置较大的连接池参数以满足需求。例如,对于一个高并发的 Web 服务,可能同时有数百个请求在处理,此时需要较大的连接池大小。可以通过压力测试工具模拟高并发场景,观察系统在不同并发请求下的性能表现,从而

【Go】go连接clickhouse使用TCP协议

离开你是傻是对是错 是看破是软弱 这结果是爱是恨或者是什么 如果是种解脱 怎么会还有眷恋在我心窝 那么爱你为什么                      🎵 黄品源/莫文蔚《那么爱你为什么》 package mainimport ("context""fmt""log""time""github.com/ClickHouse/clickhouse-go/v2")func main(

Anaconda 中遇到CondaHTTPError: HTTP 404 NOT FOUND for url的问题及解决办法

最近在跑一个开源项目遇到了以下问题,查了很多资料都大(抄)同(来)小(抄)异(去)的,解决不了根本问题,费了很大的劲终于得以解决,记录如下: 1、问题及过程: (myenv) D:\Workspace\python\XXXXX>conda install python=3.6.13 Solving environment: done.....Proceed ([y]/n)? yDownloa

nginx长连接的问题

转自: http://www.360doc.com/content/12/1108/17/1073512_246644318.shtml