首页/网络/协议速查/408 Request Timeout 请求超时
HTTP 方法与状态码91 条

408 Request Timeout 请求超时

服务器在等待请求(未在空闲超时内收到完整请求)后放弃连接;客户端可重试。

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

408 的定位

408 Request Timeout 表示服务器在空闲超时内没等到一个完整请求,主动放弃这条连接(RFC 9110 §15.5.9)。它描述的是「等你发请求」超时,与 504 的「等上游处理」超时完全是两件事。慢客户端、弱网、以及负载均衡空闲超时配置不一致,是最常见的触发源。

基本信息

名称408 Request Timeout
含义服务端等待请求(头或体)超时
规范RFC 9110 §15.5.9
Nginx 相关client_header_timeout、client_body_timeout、keepalive_timeout
可否重试幂等请求可安全重试,非幂等要先确认是否已被处理

典型使用场景

  • 弱网移动端首包慢,服务器在收到完整请求头前就超时断连
  • 负载均衡空闲超时短于客户端复用间隔:请求发到已关闭的连接上
  • 大文件慢速上传,client_body_timeout 被打断
  • 压测或爬虫并发抢连接,出现大量半开连接与 408 噪声

Nginx 超时参数

Nginx 超时参数
http {
    client_header_timeout 15s;   # 收完整请求头的最长等待
    client_body_timeout    30s;  # 两次成功读请求体的间隔上限
    keepalive_timeout      60s;  # 空闲连接保留时长
    send_timeout           30s;  # 向客户端写响应的间隔上限
}

与相邻错误码区别

状态码含义典型根因
408服务端等请求超时客户端慢、半开连接、空闲超时配得不一致
499客户端提前断开(Nginx 私有码)用户取消、前端自己的请求超时先到
502上游不可达或响应非法后端进程崩、端口不通
504等上游响应超时后端处理慢
排查时把链路三层的空闲超时对齐:负载均衡、Nginx、应用框架。空隙最大的那一层往往是「连接被悄悄关掉」的元凶。

责任不在服务端

408 由服务器发出,但根因往往在客户端或中间链路:服务器只是判定「这条连接上迟迟没有出现一个完整请求」。所以把它当服务端故障去查通常南辕北辙,正确做法是同时看客户端日志、负载均衡日志与抓包结果。

排查顺序

  • 抓包确认 408 是服务器主动发出,还是客户端自身超时后的误报
  • 对比负载均衡与会话保持的空闲超时值,与客户端复用连接的间隔
  • 检查链路里是否有 NAT 或防火墙会回收长时间空闲的连接
  • 大文件上传单独看请求体读取超时与客户端上行速率
  • 压测场景先看连接数与半开队列,再去调超时参数
Nginx 记录 408 时请求行与客户端标识往往是空的(请求头没读全就断了),这是识别「对端很慢或半开连接」的重要线索,比状态码本身更有信息量。

易错点

  • LB 空闲超时短于客户端 keepalive 复用间隔:请求落在已关闭连接上,表现为间歇性 408 或连接重置
  • 为了压掉 408 盲目加大超时:若根因是连接数耗尽或 SYN 队列打满,只会让问题更隐蔽
  • client_body_timeout 调得过小:大文件上传中途被切断,客户端只看到连接中断而非明确错误
  • 把 408 计入「服务器错误」报表:它多数由客户端与链路行为触发,告警口径要与 5xx 分开
  • 看到 408 就归因到应用:应用日志里通常什么都没有,因为请求根本没到达应用
  • NAT 或防火墙的空闲连接老化时间短于 keepalive:长连接被静默回收后继续复用,产生难以复现的间歇失败

数据来源与参考

  • RFC 9110 §15.5.9 408 Request Timeout

相关工具

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