首页/网络/协议速查/425 Too Early 过早请求
HTTP 方法与状态码91 条

425 Too Early 过早请求

服务器拒绝处理「过早」的请求:客户端在 TLS 1.3 握手中用 0-RTT 提前发送数据,服务器因重放风险要求客户端等握手完成后再来。

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

425 是什么

425 Too Early 表示服务器拒绝处理「过早到达」的请求(RFC 8470 §5.2):客户端在 TLS 1.3 握手中用 0-RTT(early data)提前发送了应用数据,服务器出于重放风险不愿处理非幂等请求。它是保护动作,避免被截获的 0-RTT 数据被重放执行,造成重复下单或重复提交。

基本信息

名称425 Too Early
类别4xx
规范RFC 8470 §5.2
关联技术TLS 1.3 的 0-RTT early data(RFC 8446)
典型触发非幂等请求(POST、PUT)走 0-RTT
推荐处理客户端等握手完成后按普通请求重发

典型使用场景

  • 上线 TLS 1.3 与 0-RTT 优化后出现 425:确认哪些方法的请求走了 early data
  • 支付与下单类接口的防重放:服务端对非幂等请求一律拒绝 0-RTT
  • 抓包分析:观察 ClientHello 之后是否紧跟应用数据
  • 客户端库配置:禁用或收紧 0-RTT 的适用范围
  • 监控口径:把 425 单列,避免与业务错误混淆
  • 安全评审:评估开启 0-RTT 带来的重放风险面

观察与规避

观察与规避
# 观察 TLS 1.3 与 early data 相关协商结果
openssl s_client -connect example.com:443 -tls1_3 -early_data </dev/null 2>&1 | grep -i -E 'early|rejected'

# 服务端返回 425 时,客户端等握手完成后按普通请求重发即可
curl -sv https://api.example.com/order -X POST -d @order.json 2>&1 | grep -E '< HTTP|handshake'

0-RTT 的取舍

选项收益风险
0-RTT省一次往返,弱网首包更快数据可被重放,非幂等请求危险
1-RTT握手完成后才发送不可重放,但多一个往返
服务端策略按方法与路径决定是否接受需要谨慎维护白名单
客户端策略只对幂等方法启用需要配置与验证
425 是「稍后重试」信号而不是失败:客户端等握手完成重发即可,业务侧通常无需提示用户。
收到 425 说明链路确实使用了 TLS 1.3 early data;若业务不容许重放风险,应在服务端统一禁用 0-RTT。
0-RTT 的性能收益在弱网与首次连接场景比较明显,但它只对幂等请求有意义,不要为了指标牺牲正确性。
监控里把 425 与普通 4xx 混在一起看,会掩盖 TLS 层配置问题,建议单独统计。

易错点

  • 服务端开启 0-RTT 却不区分方法,会让非幂等请求被重放执行,造成重复下单
  • 客户端把 425 当最终失败上报,会制造无意义的错误率
  • 调试时把 425 与业务 4xx 混在一起看,容易忽略 TLS 层配置才是根因
  • 代理终止 TLS 后,客户端到代理是 0-RTT 而代理到后端不是,风险点容易被误判
  • 只验证「能连上」而不测重放场景,安全评审会漏掉关键结论

数据来源与参考

  • RFC 8470 §5.2 425 Too Early
  • RFC 8446(TLS 1.3 early data)

相关工具

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