前端提交 8MB 的 JSON,浏览器直接收到 413,响应是网关的 HTML 错误页。应用日志里搜不到这次请求,连 access log 都没有。日志里能对上时间点,这种反而好排。
请求体在网关就被拒了,根本没转发到应用,所以应用侧什么记录都没有。客户端的 JSON 解析器拿到 HTML 就报 Unexpected token '<',真正的 413 被这条解析错误掩盖。这一点先确认清楚,后面就不用反复试。
curl -i -X POST https://api.example.com/v1/import \ -H 'Content-Type: application/json' --data-binary @big.json
这次卡住的地方就在「请求体 413」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。
处理上按这个顺序:先在网关层确认 body 大小限制 按业务调整到合理值;应用框架的 body 上限和网关保持一致 别只改一边;客户端按状态码判断 413 时提示文件过大 不要去解析响应体;大文件改成分片上传 不要继续调大单次上限。
结果对不对很好判断,同样 8MB 的请求能进到应用日志 超过新上限时返回 JSON 格式的错误而不是 HTML。
