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

HTTP keepalive 详解

一、简介

HTTP协议早期版本,比如1.0,默认是不使用持久连接的,也就是每个请求/响应之后都会关闭TCP连接。这样的话,每次请求都需要重新建立连接,增加了延迟和资源消耗。Keep-Alive的作用是保持连接,让多个请求可以复用同一个TCP连接,减少建立和关闭连接的开销,在HTTP1.1中是默认支持 Keep-Alive的。

二、原理介绍

HTTP 中的 ​Keep-Alive​(也称为持久连接或连接复用)的主要作用是允许在同一个 TCP 连接上发送和接收多个 HTTP 请求/响应,从而减少重复建立和关闭连接的开销。以下是它的核心作用和优势:

1、核心作用:

  • ​连接复用​
    默认情况下(如 HTTP/1.0),每个 HTTP 请求都会新建一个 TCP 连接,完成后立即关闭。Keep-Alive 会保持 TCP 连接打开一段时间,供后续请求复用。
    例如:浏览器加载一个网页时,可以复用同一个连接下载 HTML、CSS、图片等资源,无需反复握手。
    ​减少延迟​
  • 避免重复的 TCP 三次握手(建立连接)和四次挥手(关闭连接),降低网络延迟。
    尤其对包含大量小文件(如网页资源)的场景优化明显。
  • 节省资源​
    减少服务器和客户端的 CPU、内存消耗(避免频繁创建和销毁连接)。
    缓解端口资源占用问题。

二、技术细节:

HTTP/1.1 默认支持 Keep-Alive(无需显式设置 Connection: keep-alive),而 HTTP/1.0 需要手动启用。

1、HTTP Keep-Alive 请求头字段 (客户端 → 服务器)

  • Connection: keep-alive
    客户端明确告知服务器希望保持连接(HTTP/1.1 默认启用,但 HTTP/1.0 需显式声明)。
  • Keep-Alive: timeout=5, max=1000​(可选)
    客户端建议参数:
    timeout: 空闲超时时间(秒)
    max: 此连接允许的最大请求数

2、HTTP Keep-Alive 响应头字段​ (服务器 → 客户端)

  • Connection: keep-alive
    服务器同意保持连接(HTTP/1.1 默认启用,HTTP/1.0 需显式返回)。
  • Keep-Alive: timeout=5, max=1000​(可选)
    服务器实际使用的参数(可能覆盖客户端建议值)。

3、HTTP/1.1 与 HTTP/1.0 的区别

版本默认行为需要显式设置头?
​HTTP/1.1​默认启用持久连接关闭时需发送 Connection: close
​HTTP/1.0​ 默认关闭持久连接启用需发送 Connection: keep-alive

三、请求头与响应头示例

1、HTTP/1.1版本

  • HTTP/1.1 请求(默认启用 Keep-Alive)
GET /api/data HTTP/1.1
Host: example.com
User-Agent: MyClient
Connection: keep-alive  # 可选(HTTP/1.1 默认行为)
  • HTTP/1.1 响应(服务器同意保持连接)
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 1024
Connection: keep-alive  # 可选(HTTP/1.1 默认行为)
Keep-Alive: timeout=5, max=1000

2、HTTP/1.0版本

  • HTTP/1.0 请求(需显式启用)
GET /old-api HTTP/1.0
Host: example.com
Connection: keep-alive  # 必须显式声明
  • HTTP/1.0 响应(服务器同意保持连接)
HTTP/1.0 200 OK
Content-Type: text/html
Content-Length: 2048
Connection: keep-alive  # 必须显式返回
Keep-Alive: timeout=5

3、关闭连接

  • 客户端关闭连接,发送 Connection: close 请求头
Host: example.com
Connection: close
  • ​服务器强制关闭连接,返回 Connection: close 响应头
HTTP/1.1 200 OK
Connection: close
  • 超时或达到最大请求数
    当 超时或达到最大请求数,连接会被服务器或客户端主动关闭。

四、其他

1、HTTP的Keep-Alive和TCP的Keep-Alive机制对比

  • HTTP Keep-Alive 是应用层机制,用于复用连接。
  • TCP Keep-Alive 是传输层机制,通过发送心跳包检测连接是否存活,防止“半开连接”
http://www.dtcms.com/a/107316.html

相关文章:

  • RAG(检索增强生成)技术构建垂直领域或个人知识库
  • RNN模型及NLP应用(3/9)——Simple RNN 模型
  • ngx_vslprintf
  • 【LLM基础】DeepSpeed基础知识
  • count查询详解
  • 【FPGA】状态机思想回顾流水灯
  • Google Gemini 2.0 网页抓取真丝滑
  • Golang的文件处理优化策略
  • STM32F103C8T6单片机硬核原理篇:讨论GPIO的基本原理篇章1——只讨论我们的GPIO简单输入和输出
  • [Lc6_记忆化搜索] 不同路径 | 解决智力问题 | 有序三元组中的最大值
  • Ansible内置模块之systemd
  • 【区块链+ 房产建筑】山东省建筑产业互联网平台 | FISCO BCOS 应用案例
  • 【Linux】文件系统知识梳理:从磁盘硬件到文件管理
  • C++IO流类库
  • 单元测试原则之——不要模拟值对象 (1)
  • SIMD技术:定义、与AI的关联及推理加速
  • HarmonyOS-ArkUI Rcp模块类关系梳理
  • Flask+Vue构建图书管理系统及Echarts组件的使用
  • 使用SpringBoot + Thymeleaf + iText实现动态PDF导出
  • pollinations 一个免费文生图、声音、文网站
  • PhotoShop学习05
  • springcloud configClient获取configServer信息失败导致启动configClient注入失败报错解决
  • 安徽京准:GPS北斗卫星校时服务器助力大数据云计算
  • 《Linux内存管理:实验驱动的深度探索》大纲
  • 项目练习:若依系统二次开发中,某些情况下,v-hasPermi不适合的解决办法
  • DoDAF科普
  • Python入门(5):异常处理
  • 蓝桥杯练习:对称二叉树
  • 全国产FMC子卡-16bit 8通道2.4G
  • Leetcode 6207 -- DP | 思维 | 双指针