Expect: 100-continue 带来的诡异超时
上传接口偶发慢一秒,抓包发现客户端发了请求头后停住,等了一秒才发 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 有没有出现,一目了然。