Plainnotes

Expect: 100-continue 带来的诡异超时

2025-06-04 · 3 分钟网络

上传接口偶发慢一秒,抓包发现客户端发了请求头后停住,等了一秒才发 body。原因是请求头里带了 Expect: 100-continue。

这是 HTTP/1.1 的机制:客户端先发头,问服务端“我要发大 body,你收不收”,服务端回 100 Continue 再发。但很多反向代理和框架不实现,客户端只能等超时(通常是 1 秒)后直接发。

修复方向:

  • 客户端:body 小于阈值(比如 1MB)时不要加这个头,curl 用 -H 'Expect:' 去掉。
  • 服务端:nginx 默认会把 Expect 转发给上游,可以用 proxy_set_header Expect ""; 去掉,让上游直接处理 body。
  • 框架层:Spring 的 server.tomcat.reject-illegal-header 之类不相关,真正的是确认容器有没有 continue 支持。

抓包看 100 Continue 有没有出现,一目了然。