【问题标题】:Client gets empty response after setting status to HttpServletResponse将状态设置为 HttpServletResponse 后客户端得到空响应
【发布时间】:2014-10-12 08:49:14
【问题描述】:

在一个 java web-app 中我写到我的 HttpServletResponse:

httpResponse.getWriter().write(someJsonString);
httpResponse.getWriter().flush();

客户端(在本例中为apache jmeter)按预期获取正文中包含 json 且状态为 200 的响应。

如果我决定更改响应状态:

httpResponse.getWriter().write(someJsonString);
httpResponse.setStatus(Response.Status.NO_CONTENT.getStatusCode());
httpResponse.getWriter().flush();

我的客户得到了正确状态的响应(在这种情况下为 204),但由于某种原因是一个空的正文。

这是什么原因造成的?

【问题讨论】:

  • 先尝试设置状态。 Ut ti 发送一些内容并设置一个表示没有内容的标题是没有意义的。
  • 您是否手动将所有响应的状态代码添加为“No_Content”状态代码。?
  • @EJP 尝试过 - 结果相同。
  • @Kannan_SJD “所有回复”是什么意思?我确实手动添加了一些,是的。

标签: java servlets


【解决方案1】:

当您发送响应为 204 时,表示没有正文。 见w3c rfc

204 响应不得包含消息正文,因此始终以标头字段后的第一个空行终止。

这意味着在发送响应时,容器没有考虑正文,或者您的客户端在读取响应状态后丢弃。

如果可能,一种方法是在网络浏览器中检查此响应。使用 Chrome 中的 fire-bug 或类似工具,您可以实际检查响应。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-25
    • 2021-04-20
    • 2021-05-28
    • 2021-04-28
    • 1970-01-01
    • 2020-09-04
    • 2017-04-23
    • 2017-06-23
    相关资源
    最近更新 更多