首页/网络/协议速查/426 Upgrade Required 需要升级协议
HTTP 方法与状态码91 条

426 Upgrade Required 需要升级协议

服务器要求客户端改用更高版本或其它协议再请求,响应带 Upgrade 头指明要求。

协议速查网络更新于 2026-10-13

426 是什么

426 Upgrade Required 表示服务器要求客户端换用更高版本的协议或另一种协议再请求(RFC 9110 §15.5.22):响应通过 Upgrade 头指明期望的目标协议或版本,常见于强制 HTTPS 迁移、强制 HTTP/2,以及 API 版本切换的过渡期。

基本信息

名称426 Upgrade Required
类别4xx
规范RFC 9110 §15.5.22
关键头部Upgrade 声明目标协议,Connection: Upgrade
常见场景明文 HTTP 被要求改走 TLS
现状浏览器没有内建的自动升级行为

典型使用场景

  • 强制 HTTPS:明文入口返回 426,明确要求走 TLS
  • 协议升级过渡:要求客户端先满足 HTTP/2 的前置条件
  • API 版本强制升级:老版本客户端被要求换新版本
  • 排障:确认 426 响应里的 Upgrade 具体要求什么协议
  • 安全基线检查:核对是否仍在明文端口暴露服务
  • 客户端兼容评估:确认自家 SDK 是否能处理 426

复现与浏览器侧做法

复现与浏览器侧做法
# 明文访问被要求升级到 TLS
printf 'GET / HTTP/1.1\r\nHost: example.com\r\nConnection: upgrade\r\nUpgrade: TLS/1.2, HTTP/1.1\r\n\r\n' | nc example.com 80
# HTTP/1.1 426 Upgrade Required
# Upgrade: TLS/1.2, HTTP/1.1
# Connection: Upgrade

# 面向浏览器的迁移更推荐跳转而不是 426
curl -sI http://example.com/ | grep -iE '^(HTTP|location)'

强制升级的几种表达

方式机制适用
426Upgrade 头声明目标协议协议级升级要求,面向 API 客户端
301 与 308Location 指向 https 地址面向浏览器的永久迁移
HSTS浏览器记住必须使用 HTTPS长期策略,需先有可用证书
302 与 307临时跳转灰度与调试阶段
浏览器对 426 没有内建的自动升级行为,面向用户的站点迁移仍应使用 301 或 308 跳转。
Connection 与 Upgrade 属于逐跳语义,代理必须显式转发,否则客户端根本看不到服务器的升级要求。
强制 HTTPS 的完整做法是「跳转加 HSTS 响应头」,426 更适合 API 与协议客户端这类能自主处理升级的场景。
在明文端口返回 426 通常只是一次性提示:真正的迁移路径是 301 跳转到 HTTPS 并同时下发 HSTS,避免用户每次访问都被拦一次。
Connection: Upgrade 只在当前连接内有效;客户端重连后若仍使用旧协议,服务器需要重复返回 426。

易错点

  • 面向浏览器返回 426 会让用户看到错误页:迁移请用 301 或 308,426 更适合 API 与协议客户端
  • 忘记带 Upgrade 头,426 就成了无法执行的响应:客户端不知道要升到什么
  • 代理剥离 Connection 与 Upgrade 会让 426 失效或被误判为 5xx
  • 只发 426 而不提供可用的 HTTPS 入口,客户端会陷入无法继续的状态
  • 把 426 与 301 混用于同一入口会让自动化客户端反复失败:机器客户端要么整体切到 HTTPS,要么老老实实跟随跳转

数据来源与参考

  • RFC 9110 §15.5.22 426 Upgrade Required

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌