首页 > 其他分享 >http1.1 的默认长连接 Connection: keep-alive 与 TCP KeepAlive 之间区别

http1.1 的默认长连接 Connection: keep-alive 与 TCP KeepAlive 之间区别

时间:2024-06-05 20:44:34浏览次数:21  
标签:http1.1 HTTP TCP keep Nginx alive KeepAlive 连接 keepalive

 

HTTP 长连接,也称为 HTTP 持久连接(HTTP Persistent Connection)或 HTTP 连接重用,是一种在 HTTP 协议中实现的机制。

在传统的 HTTP 通信中,每个 HTTP 请求和响应都会伴随着 TCP 连接的建立和关闭,这在高并发场景下会增加网络开销和延迟。

而 HTTP 长连接则允许客户端和服务器在完成一次 HTTP 事务后保持 TCP 连接打开,以便后续的HTTP请求可以复用同一连接,而不是每次都创建新的连接。

核心意图是在一段时间内复用TCP连接

 

以下是一些关于HTTP长连接的关键点:

  连接保持:在HTTP/1.1及更高版本中,默认启用长连接。响应头中的 Connection: keep-alive 指示客户端和服务器都应尝试保持连接开放。

      如果要关闭 Keep-Alive,需要在 HTTP 请求的包头里添加: Connection :close

      现在大多数浏览器都默认是使用 HTTP/1.1,所以 Keep-Alive 都是默认打开的。

  性能优化:通过减少TCP连接的创建和销毁,长连接减少了网络开销,降低了延迟,并提高了整体性能。

  Keep-Alive 头:Keep-Alive 头通常用于设置连接的超时时间,即连接在无活动多久后关闭。如果不指定,连接可能会在一段时间后自动关闭,或者在服务器或客户端选择关闭时关闭。

  资源管理:虽然长连接可以提高效率,但服务器需要管理这些持续连接的资源,防止过多的开放连接耗尽服务器资源。

  适用性:并非所有HTTP请求都适合使用长连接,例如,如果请求之间有安全隔离的需求,或者服务器需要释放资源,可能会选择关闭连接。

  

要想做到 Client 与 Nginx 之间保持长连接,需要:

  - Client 发送过来的 HTTP 请求 header 要求携带 "keep-alive"
  - Nginx 设置支持 keepalive

  Nginx中的 keepalive 配置项:keepalive_timeout

  Nginx 使用 keepalive_timeout 来指定 KeepAlive 的超时时间(timeout),指定每个 TCP 连接最多可以保持多长时间。Nginx 的默认值是 75 秒,有些浏览器最多只保持 60 秒,所以可以设定为 60 秒。若将它设置为 0,就禁止了 keepalive 连接。

 

注意和 TCP 的 KeepAlive 区别对待:

HTTP 协议的 KeepAlive 意图在于连接复用,同一个连接上串行方式传递请求-响应数据。
TCP 的 KeepAlive 机制意图在于保活、心跳,检测连接错误。
  Linux 操作系统中设置 KeepAlive 相关参数(/etc/sysctl.conf):
  net.ipv4.tcp_keepalive_time=90
  net.ipv4.tcp_keepalive_intvl=15
  net.ipv4.tcp_keepalive_probes=2

  

Link:https://www.cnblogs.com/farwish/p/18233744

标签:http1.1,HTTP,TCP,keep,Nginx,alive,KeepAlive,连接,keepalive
From: https://www.cnblogs.com/farwish/p/18233744

相关文章

  • zookeeper:Unexpected exception, exiting abnormally ::java.io.EOFException
    转载请注明出处:服务器中断,重启服务器在重启kafka服务时,遇到如下报错:2024-06-0513:52:56,251[myid:]-ERROR[main:ZooKeeperServerMain@64]-Unexpectedexception,exitingabnormallyjava.io.EOFExceptionatjava.io.DataInputStream.readInt(DataInputStream.j......
  • 【vuejs】keep-alive组件的原理讲解和使用讲解
    1.keep-alive简介Vue.js框架中的<keep-alive>组件是一个用于缓存组件实例的内置组件,它使得组件在不活动时保持其状态,从而提高应用的性能和用户体验。当使用动态组件<component>切换视图时,不在显示的组件实例会被销毁并重新创建,这会导致状态丢失。而<keep-alive>可......
  • repmgr+keepalived+pgbouncer构建postgresql集群
    安装环境操作系统:openeuler22LTSSP3数据库:postgresql16.3两台已经安装了数据库的服务器10.11.110.46 node110.11.110.47 node2配置node1和node2之间的免密登录,以及postgres用户需要无密执行systemd启停数据库服务。echo"postgresALL=(root)NOPASSWD:/usr/bin/sys......
  • 使用 docker-compose 部署 zookeeper(单机和集群)
    我之前编写了一些zookeeper的博客,当时是在windows系统上部署的单机版,在实际应用中绝大多数情况下都是部署在Linux系统上,因此很有必要介绍一下如何在CentOS7上快速部署zookeeper的单机版和集群版。这里就不详细介绍zookeeper了,网上资料很多,也可以查看官网或者我之前的......
  • Mysql主主复制+keepalived
     MySQL的主从复制和主主复制可以参考一下两篇文章:MySQL主从同步-CSDN博客MySQL主主复制-CSDN博客master服务器IP192.168.7.67slave服务器IP192.168.7.711、keepalived部署(master和slave服务器都安装)安装依赖包:[root@dockermysql]#yuminstallgcclibnllibnl-devel......
  • SQL KEEP 窗口函数等价改写案例
    一哥们出条sql题给我玩,将下面sql改成不使用keep分析函数的写法。selectdeptno,ename,sal,hiredate,min(sal)keep(dense_rankfirstorderbyhiredate)over(partitionbydeptno)min_sal,max(sal)keep(dense_ranklastorderby......
  • 使用MySQL主主复制加Keepalived实现高可用
    目录资源列表基础环境关闭防火墙关闭内核安全机制修改主机名时间同步一、安装MySQL准备yum源清理mariadb相关的包安装启动二、MySQL主主复制两个节点授权用户两个节点使用授权用户进行连接启动同步三、安装keepalived安装修改配置文件启动服务验证  ......
  • 简单理解Zookeeper之数据同步机制
    写入数据流程请求发给Leaderclient向Zookeeper集群的Leader节点发送写请求Leader节点接收到写请求后,会对请求进行预处理,并为这次写操作分配一个全局唯一的递增ID(ZXID)。Leader将这个写请求(提案)广播给所有的Follower节点。这个提案包含了请求的具体内容和分配的ZXID。每个......
  • [转载]TCP keepalive的详解(解惑)
    原文出自于https://www.cnblogs.com/lanyangsh/p/10926806.htmlTCP是面向连接的,一般情况,两端的应用程序可以通过发送和接收数据得知对端的存活。当两端的应用程序都没有数据发送和接收时,如何判断连接是否正常呢?这就是SO_KEEPALIVE的作用。1.SO_KEEPALIVE的作用1.1SO_KEEPA......
  • 满帮集团 Eureka 和 ZooKeeper 的上云实践
    作者:胡安祥满帮集团,作为“互联网+物流”的平台型企业,一端承接托运人运货需求,另一端对接货车司机,提升货运物流效率。2021年美股上市,成为数字货运平台上市第一股。根据公司年报,2021年,超过350万货车司机在平台上完成超1.283亿个订单,实现总交易价值GTV2623亿元,占中国数字货......