计算机网络:非持久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

相关文章

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

Spring Boot 整合 MyBatis 连接数据库及常见问题

《SpringBoot整合MyBatis连接数据库及常见问题》MyBatis是一个优秀的持久层框架,支持定制化SQL、存储过程以及高级映射,下面详细介绍如何在SpringBoot项目中整合My... 目录一、基本配置1. 添加依赖2. 配置数据库连接二、项目结构三、核心组件实现(示例)1. 实体类2. Ma

电脑win32spl.dll文件丢失咋办? win32spl.dll丢失无法连接打印机修复技巧

《电脑win32spl.dll文件丢失咋办?win32spl.dll丢失无法连接打印机修复技巧》电脑突然提示win32spl.dll文件丢失,打印机死活连不上,今天就来给大家详细讲解一下这个问题的解... 不知道大家在使用电脑的时候是否遇到过关于win32spl.dll文件丢失的问题,win32spl.dl

SpringCloud之consul服务注册与发现、配置管理、配置持久化方式

《SpringCloud之consul服务注册与发现、配置管理、配置持久化方式》:本文主要介绍SpringCloud之consul服务注册与发现、配置管理、配置持久化方式,具有很好的参考价值,希望... 目录前言一、consul是什么?二、安装运行consul三、使用1、服务发现2、配置管理四、数据持久化总

Windows Server服务器上配置FileZilla后,FTP连接不上?

《WindowsServer服务器上配置FileZilla后,FTP连接不上?》WindowsServer服务器上配置FileZilla后,FTP连接错误和操作超时的问题,应该如何解决?首先,通过... 目录在Windohttp://www.chinasem.cnws防火墙开启的情况下,遇到的错误如下:无法与

Go语言中最便捷的http请求包resty的使用详解

《Go语言中最便捷的http请求包resty的使用详解》go语言虽然自身就有net/http包,但是说实话用起来没那么好用,resty包是go语言中一个非常受欢迎的http请求处理包,下面我们一起来学... 目录安装一、一个简单的get二、带查询参数三、设置请求头、body四、设置表单数据五、处理响应六、超

IDEA连接达梦数据库的详细配置指南

《IDEA连接达梦数据库的详细配置指南》达梦数据库(DMDatabase)作为国产关系型数据库的代表,广泛应用于企业级系统开发,本文将详细介绍如何在IntelliJIDEA中配置并连接达梦数据库,助力... 目录准备工作1. 下载达梦JDBC驱动配置步骤1. 将驱动添加到IDEA2. 创建数据库连接连接参数

如何使用Docker部署FTP和Nginx并通过HTTP访问FTP里的文件

《如何使用Docker部署FTP和Nginx并通过HTTP访问FTP里的文件》本文介绍了如何使用Docker部署FTP服务器和Nginx,并通过HTTP访问FTP中的文件,通过将FTP数据目录挂载到N... 目录docker部署FTP和Nginx并通过HTTP访问FTP里的文件1. 部署 FTP 服务器 (

Qt实现发送HTTP请求的示例详解

《Qt实现发送HTTP请求的示例详解》这篇文章主要为大家详细介绍了如何通过Qt实现发送HTTP请求,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、添加network模块2、包含改头文件3、创建网络访问管理器4、创建接口5、创建网络请求对象6、创建一个回复对

springMVC返回Http响应的实现

《springMVC返回Http响应的实现》本文主要介绍了在SpringBoot中使用@Controller、@ResponseBody和@RestController注解进行HTTP响应返回的方法,... 目录一、返回页面二、@Controller和@ResponseBody与RestController