浏览文章索引 63 篇
此页内容
正文阅读

HTTP 204 没有正文是故障吗?分清空响应与连接失败

客户端健康检查显示成功,浏览器打开同一地址却是一片空白;或者程序收到响应后报“JSON 解析失败”。遇到这类情况,先看 HTTP 状态是否为 204 No Content,不要马上把它解释为机场断流。

本文适用于已经收到 HTTP 响应的排障。若连状态码都没有,应该先检查解析、连接、TLS 或本地超时。

204 本来就不返回正文

RFC 9110 规定,204 表示服务器已成功完成请求,没有额外内容可发送;响应在头部结束处终止,不能包含响应内容或 trailers。因此一个合规的 204 响应没有 JSON,也没有页面正文。RFC 9110:204

它可以用于某些成功保存或删除的接口,也可出现在采用无正文响应的连通性检查中。具体接口是否应返回 204,要以该接口文档为准,不能要求所有成功请求都必须返回 200 和一段文字。MDN:204

把三种“空”分开记录

现象 能确认什么 下一步
收到 204,正文为空 有一条无正文的成功响应 核对该接口是否按设计使用 204
收到其他状态,正文为空 收到了响应,但语义由状态和方法决定 同时查看请求方法、响应头和接口文档
没有收到 HTTP 状态 尚不能证明 HTTP 请求完成 根据客户端错误查连接或超时阶段

不要使用“空文件”作为唯一判据。HEAD 方法也不会传回响应正文,但它和 204 的含义不同;正常 GET 到业务页面是否该有内容,需要单独验收。

一次低风险核对流程

  1. 先确认这是公开测试地址还是业务 API。对登录、付款、删除和上传请求,不要为了排障反复重发。
  2. 在浏览器开发者工具的网络面板,或客户端的请求记录中,读取请求方法、状态和响应头。
  3. 若是 204,核对接口文档是否要求无正文。若程序强制把响应解析成 JSON,应按接口约定调整处理逻辑,而非添加不存在的数据。
  4. 再用正常业务页面执行一次只读操作,确认实际工作能完成。不要把一个健康检查地址成功视为所有网站都可用。

记录模板可以写成:“目标属于公开只读接口;方法 GET;状态 204;正文零字节;业务页面另行验证成功或失败。”客户端若还报告错误,要把错误文字单独保留。

为什么测试绿灯不等于业务验收通过

健康检查往往只覆盖一个测试目标。它可以验证这次请求得到了预期响应,却无法代表其他域名、文件上传、长连接或账号接口的表现。

做机场推荐或试用比较时,保留同一测试目标作为基础,再加入你真正需要的业务。不要把204的空正文当坏消息,也不要把204的成功当作全部业务的保证。

验收方法

完成排查后应能分别回答:有没有收到响应;该方法与状态是否符合接口约定;真实业务是否完成。三项结果各自明确,才不会把协议正常和应用处理错误混为一谈。

参考资料

评论

搜索文章

正在加载搜索…