当前位置: 首页 > news >正文

对于HTTP协议,什么是长连接和短连接?

HTTP协议的短连接和长连接

HTTP协议的长连接和短连接,实际上是TCP协议的长连接和短连接。
我们将分HTTP的版本来讨论这个问题。

在HTTP/1.0

  在HTTP/1.0中默认使用的是短连接,也就是说,客户端和服务器每一次进行一个HTTP操作,就建立一次HTTP连接,任务结束就中断连接。当客户端浏览器访问的某一个HTML或是其他类型的Web页中包含有其他Web资源(如JS文件、图片文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话,也就是重新进行TCP连接。

网络上的会话指的是什么?
在计算机网络上的会话,如TCP的三次握手就创建了一个会话,TCP关闭连接就是关闭会话。

在HTTP/1.1

  从HTTP/1.1起,默认使用的是长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头入这行代码

 Connection:keep-alive

  在使用长连接的情况下,当一个网页打开完成后,客户端和服务器直接用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive不会永久保存连接,它有一个保存时间,可以在不同的服务器软件(如Apache)中设定这个时间。
  实现长连接需要客户端和服务端都支持长连接。

关于长连接和短连接的优缺点

短连接

  优点:短连接对于服务器来说,存在的连接都是有用的连接,不需要做额外的控制手段,因此短连接对服务器来说管理比较简单。

  缺点:如果客户请求频繁,短连接将在TCP的简历和关闭操作上浪费时间和宽带。

长连接

   长连接可以省去较多的TCP简历和关闭的操作,减少浪费,节约时间。对应频繁请求支援的客户来说,适合长连接。不过在长连接中存在一个问题,存活功能的探测周期太长,还有就是它只是探测TCP连接的存活,遇到恶意连接时,保活功能不够使了。在长连接的应用场景之下,客户端一般不会主动关闭它们之间的连接,Client与Server直接的连接如果一直不关闭的话,就会存在一个问题,随着客户端连接越来越多,Server早晚都有扛不住的时候,这个时候Server端需要采取一些策略,如关闭一些长时间没有读写事件发生的连接,这样可以避免一些恶意连接导致Server端服务受损。
  而如果条件允许的话就可以以客户端机器为颗粒度,限制每个客户端的最大长连接数,这样可以完全避免某个蛋疼的客户端连累后端服务。

短连接和长连接的操作过程是怎么样的?

短连接的操作步骤是:
建立连接——数据传输——关闭连接,这样不断循环。

长连接的操作步骤是:建立连接——数据传输——(保存连接)——数据传输——关闭连接。这样不断循环

相关文章:

  • ReentrantLock读写锁
  • leetcode 1680. Concatenation of Consecutive Binary Numbers(连接连续的二进制数)
  • Python数据分析之时间序列的处理
  • 【PHP】如何搭建服务器环境 原生篇 | Ubuntu 18.04 + PHP8.1 + MySQL5.7 + Nginx 1.4
  • 【c语言】数据在内存中的存储
  • 数据结构考试必须要掌握的重点知识
  • 进程管理4——进程优先级
  • 外网访问内网80端口【内网穿透】
  • Android性能优化技术,在大厂中为何这么看重?进大厂必学好
  • 基于自建数据集【海底生物检测】使用YOLOv5-v6.1/2版本构建目标检测模型超详细教程
  • 水平分表之基因法
  • Gorm笔记
  • 抽空做了个“胃肠镜”,唠唠嗑
  • 现在工作是不是很难找?
  • Colmap算法pipeline
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 【笔记】你不知道的JS读书笔记——Promise
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • 【译】理解JavaScript:new 关键字
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • Github访问慢解决办法
  • in typeof instanceof ===这些运算符有什么作用
  • Java IO学习笔记一
  • javascript 哈希表
  • Vultr 教程目录
  • 程序员最讨厌的9句话,你可有补充?
  • 分布式熔断降级平台aegis
  • 看域名解析域名安全对SEO的影响
  • 前端知识点整理(待续)
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 在electron中实现跨域请求,无需更改服务器端设置
  • MyCAT水平分库
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ​iOS实时查看App运行日志
  • #pragma 指令
  • #微信小程序(布局、渲染层基础知识)
  • (Forward) Music Player: From UI Proposal to Code
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (TOJ2804)Even? Odd?
  • (二)linux使用docker容器运行mysql
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (强烈推荐)移动端音视频从零到上手(上)
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (十三)Maven插件解析运行机制
  • (原創) 未来三学期想要修的课 (日記)
  • (转)Google的Objective-C编码规范
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .net 提取注释生成API文档 帮助文档
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • .Net下C#针对Excel开发控件汇总(ClosedXML,EPPlus,NPOI)