204 响应带了 body,客户端会卡住
接口返回 204,但代码里还是 Write("ok") 了一下。多数客户端能容忍,个别 HTTP/2 实现会直接报协议错误,或者等 body 一直等到超时。
RFC 7230 规定 204 和 304 不能带消息体,Content-Length 也不该出现。框架层通常会吞掉,但手写响应时容易漏。
排查:
curl -sv https://api.example.com/x 2>&1 | grep -E 'HTTP/|Content-Length'
看到 HTTP/2 204 后面跟 content-length: 2,就是这个问题。
顺带一提,304 也一样。缓存协商返回 304 时如果带了 body,代理和客户端的行为会不一致,有的丢掉,有的当成 200 处理。