持久性HTTPVS.非持久性HTTP

1. HTTP协议基础

HTTP(HyperText Transfer Protocol)是Web通信的核心协议,定义了客户端(浏览器)与服务器之间传输数据的规则。
在HTTP/1.0及之前的版本中,默认使用非持久性连接,而HTTP/1.1及更高版本引入了持久性连接(默认开启)。两者的核心差异在于TCP连接的生命周期管理


2. 非持久性HTTP(HTTP Non-Persistent)

2.1 工作原理

  • 每次请求新建连接:客户端每次发送HTTP请求时,需建立新的TCP连接,响应完成后立即关闭。
  • 高延迟开销:每个请求需经历TCP三次握手(建立连接)和四次挥手(关闭连接)。
  • 资源浪费:频繁的TCP连接操作消耗服务器和客户端资源。

2.2 示例

假设用户访问一个包含3张图片的网页(index.html):

  1. 请求HTML文件
    • 客户端发送GET /index.html → 服务器返回HTML文件 → 关闭连接
  2. 请求图片1
    • 新建TCP连接 → GET /image1.jpg → 返回图片 → 关闭连接
  3. 重复步骤2:图片2和图片3各自重复上述过程。

性能损耗计算(假设每次握手/挥手耗时1个RTT,传输数据1个RTT):

  • 总耗时 = (3次请求 × 3 RTT) = 9 RTT(实际更高,因TCP慢启动等机制)。

2.3 性能缺陷

问题原因
高延迟每个请求需额外3个RTT(握手+挥手)
服务器资源占用高频繁创建/销毁TCP连接消耗CPU和内存
并行请求受限浏览器对同一域名最多允许6-8个并发连接(HTTP/1.1前)

3. 持久性HTTP(HTTP Persistent)

3.1 工作原理

  • 复用TCP连接:单个TCP连接可传输多个HTTP请求/响应,通过Connection: keep-alive头部启用(HTTP/1.1默认支持)。
  • 连接保持时间:服务器可设置Keep-Alive: timeout=5, max=100(空闲5秒关闭,最多处理100个请求)。
  • 减少握手次数:仅在首次建立连接时进行三次握手,后续请求复用通道。

3.2 示例

同一网页(index.html + 3张图片)使用持久性HTTP加载:

  1. 建立TCP连接 → 请求HTML文件 → 返回HTML → 保持连接
  2. 复用同一连接依次请求图片1、2、3,无需重复握手。

性能优化计算

  • 总耗时 = 1次握手(3 RTT) + 4次数据传输(4 RTT) = 7 RTT(节省33%时间)。

3.3 性能优势

优势原因
低延迟复用连接省去重复握手/挥手时间
高吞吐量减少TCP缓冲区重建开销,提升数据传输效率
资源利用率高服务器和客户端减少连接管理开销

4.对比一下

特性非持久性HTTP持久性HTTP
连接生命周期每次请求后关闭连接复用同一连接处理多个请求
默认协议版本HTTP/1.0HTTP/1.1+
头部控制无(默认关闭)Connection: keep-alive(HTTP/1.1默认开启)
延迟开销高(每次请求3 RTT)低(首次3 RTT,后续1 RTT/请求)
服务器资源占用高(频繁创建/销毁连接)低(长连接减少操作次数)
适用场景简单静态资源、兼容旧系统现代Web应用、多资源页面

5. 现代HTTP协议的演进

  • HTTP/2多路复用:在持久性连接基础上,允许通过单个连接并行传输多个请求(解决队头阻塞)。
  • HTTP/3与QUIC:基于UDP协议,进一步减少握手延迟,优化移动网络下的性能。

6. 总结

  • 非持久性HTTP适合简单场景,但性能瓶颈明显。
  • 持久性HTTP通过连接复用显著提升效率,成为现代Web的基石。
  • 随着HTTP/2和HTTP/3的发展,持久性连接的优化仍在持续演进。

附录:实际抓包示例
通过Wireshark抓取两种模式的网络包对比:

  • 非持久性:每个请求对应独立的TCP流(Filter: http.request)。
  • 持久性:单个TCP流中包含多个HTTP请求(Filter: tcp.stream eq <ID>)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/895317.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据与大模型:数字时代的共生力量

引言&#xff1a;大数据与大模型的崭新时代 在数字化浪潮汹涌澎湃的当下&#xff0c;大数据与大模型无疑是最为耀眼的两颗明星 &#xff0c;深刻地改变着我们的生活、工作和思维方式。大数据&#xff0c;作为信息时代的宝藏&#xff0c;蕴含着无尽的价值。从电商平台的海量交易…

中间件-redis-(ubantu)

1、安装依赖包 sudo apt-get update sudo apt-get install redis 一旦安装完成&#xff0c;Redis 服务将会自动启动。想要检查服务的状态&#xff0c;输入下面的命令&#xff1a; rootvims:/etc/redis# sudo systemctl status redis-server ● redis-server.service - Adva…

网络安全架构师怎么考 网络安全 架构

安全通信网络 随着现代技术的不断发展&#xff0c;等级保护对象通常通过网络实现资源共享和数据交互&#xff0c;当大量的设备连成网络后&#xff0c;网络安全成了最为关注的问题。按照“一个中心&#xff0c;三重防御”的纵深防御思想&#xff0c;边界外部通过广域网或城域网…

[2025年最新]2024.3版本idea无法安装插件问题解决

背景 随着大模型的持续发展&#xff0c;特别年前年后deepseek的优异表现&#xff0c;编程过程中&#xff0c;需要解决ai来辅助编程&#xff0c;因此需要安装一些大模型插件 问题描述 在线安装插件的时候会遇到以下问题&#xff1a; 1.数据一直在加载&#xff0c;加载的很满 2.点…

自动驾驶---如何打造一款属于自己的自动驾驶系统

在笔者的专栏《自动驾驶Planning决策规划》中&#xff0c;主要讲解了行车的相关知识&#xff0c;从Routing&#xff0c;到Behavior Planning&#xff0c;再到Motion Planning&#xff0c;以及最后的Control&#xff0c;笔者都做了相关介绍&#xff0c;其中主要包括算法在量产上…

centos7 升级openssl并安装python3

参考文章&#xff1a;https://www.cnblogs.com/chuanzhang053/p/17653635.html 卸载已有版本 yum remove -y openssl openssl-devel下载1.1版本 wget https://www.openssl.org/source/openssl-1.1.1v.tar.gztar -zxf openssl-1.1.1v.tar.gz 查看openssl.conf文件的目录 fin…

【python】3_容器

目录 一、列表 list 1.1基本语法 1.2 常用操作方法 1.3 列表的遍历 二、元组 tuple 特点&#xff1a; 三、字符串 常用操作方法&#xff1a; 四、序列 操作方法&#xff1a;切片 五、元素 特点&#xff1a; 基本语法&#xff1a; 集合常用功能&#xff1a; 六、字…

三角拓扑聚合优化器TTAO-Transformer-BiLSTM多变量回归预测(Maltab)

三角拓扑聚合优化器TTAO-Transformer-BiLSTM多变量回归预测&#xff08;Maltab&#xff09; 完整代码私信回复三角拓扑聚合优化器TTAO-Transformer-BiLSTM多变量回归预测&#xff08;Maltab&#xff09; 一、引言 1、研究背景和意义 在现代数据科学领域&#xff0c;时间序列…

Jenkins+gitee 搭建自动化部署

Jenkinsgitee 搭建自动化部署 环境说明&#xff1a; 软件版本备注CentOS8.5.2111JDK1.8.0_211Maven3.8.8git2.27.0Jenkins2.319最好选稳定版本&#xff0c;不然安装插件有点麻烦 一、安装Jenkins程序 1、到官网下载相应的版本war或者直接使用yum安装 Jenkins官网下载 直接…

AI 编程开发插件codeium Windsurf(vscode、editor) 安装

1、vscode中安装&#xff1a; 2、vscode中使用 3、输入注册的账号密码&#xff0c;就可以使用。 4、或者直接下载editor 5、安装editor 下一步&#xff0c;下一步&#xff0c;直到安装成功&#xff0c;中间可以改下安装位置&#xff0c;如果C盘空间不够。 同样提示注册或者登录…

【Mac排错】ls: command not found 终端命令失效的解决办法

【TroubleShooting on Mac】ls: command not found 终端命令失效的解决办法 A Solution to Solve “Command not found” of Terminal on Mac 一直在使用心爱的MacBook Pro的Terminal&#xff0c;并且为她定制了不同的Profile。 这样&#xff0c;看起来她可以在不同季节&…

502 Bad Gateway 错误详解:从表现推测原因,逐步排查直至解决

502 Bad Gateway 错误通常意味着服务器之间的通信失败&#xff0c;但导致的具体原因往往因场景而异。 场景一&#xff1a;高峰期频繁出现 502 错误 1.1 现象 在流量高峰期间&#xff08;如促销活动、直播发布等&#xff09;&#xff0c;页面访问变慢甚至出现 502 错误&#…

河北某石油管廊自动化监测

1. 项目简介 近年来&#xff0c;国家密集出台油气管道建设相关政策和规划引导中国油气管道加快建设&#xff0c;2017年&#xff0c;在《中长期油气管网规划》中对2025年和2030年油气管道发展目标均作出了相应的规划目标。另一方面&#xff0c;随着油气管道行业的发展&#xff…

问题:通过策略模式+工厂模式+模板方法模式实现ifelse优化

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 示例&#xff1a;商城系统有会员系统&#xff0c;不同会员有不同优惠程度&#xff0c;普通会员不优惠&#xff1b;黄金会员打8折&#xff1b;白金会员优惠50元&#xff0c;再打7折&#xff1b; 问题描…

深入 JVM 虚拟机:字符串常量池演变与 intern() 方法工作原理解析

🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall ︱vue3-element-admin︱youlai-boot︱vue-uniapp-template 🌺 仓库主页: GitCode︱ Gitee ︱ Github 💖 欢迎点赞 👍 收藏 ⭐评论 📝 如有错误敬请纠正! 前言 在 Java 开发中,字符串常量池(String Constant…

Android ndk兼容 64bit so报错

1、报错logcat如下 2025-01-13 11:34:41.963 4687-4687 DEBUG pid-4687 A #01 pc 00000000000063b8 /system/lib64/liblog.so (__android_log_default_aborter16) (BuildId: 467c2038cdfa767245f9280e657fdb85) 2025…

centos安装Nexus Repository OSS(Maven私服)

1. 下载链接&#xff1a;https://help.sonatype.com/en/download.html 2. 注意页面下载页面中的要求&#xff1a;JDK17&#xff08;启动时提示最低JDK1.8最高JDK17&#xff0c;但是使用JDK1.8无法正常启动&#xff09; 3. mkdir /opt/nexus 将压缩包上传到该目录并解压。 tar …

b站——《【强化学习】一小时完全入门》学习笔记及代码(1-3 多臂老虎机)

问题陈述 我们有两个多臂老虎机&#xff08;Multi-Armed Bandit&#xff09;&#xff0c;分别称为左边的老虎机和右边的老虎机。每个老虎机的奖励服从不同的正态分布&#xff1a; 左边的老虎机&#xff1a;奖励服从均值为 500&#xff0c;标准差为 50 的正态分布&#xff0c;即…

1.推荐算法基本概念

推荐算法是一个非常重要且广泛应用的领域&#xff0c;特别是在电子商务、社交媒体、内容推荐等领域。第一课我们将介绍推荐算法的基本概念和分类&#xff0c;并简单讲解两种常见的推荐算法&#xff1a;协同过滤和基于内容的推荐。 推荐算法的基本概念 推荐系统的目标是根据用…

FFmpeg + OpenGL ES 美颜相机教程大纲

做OpenGL和FFmpeg也有很长一段时间了&#xff0c;最近打算结合FFmpegOpenGL ES做一期视频教程&#xff0c;下面是完整视频教程大纲。最终的项目实战效果是实现一款美颜相机。教程分为理论讲解和实战开发两部分&#xff0c;适合有一定编程基础的开发者。课程计划是免费发布在B站…