如何正确地向客户端发送 HTTP 消息

新手上路,请多包涵

我正在使用 Java 开发 RESTful Web 服务。如果出现问题,我需要一种向客户端发送错误消息的好方法。

根据 JavadocHttpServletResponse.setStatus(int status, String message) 已弃用 “由于消息参数的含义不明确”。

是否有一种首选方法来设置响应的状态消息或“ 原因短语”? sendError(int, String) 方法不这样做。

编辑:澄清一下,我想修改 HTTP 状态行,即 "HTTP/1.1 404 Not Found" ,而不是正文内容。具体来说,我想发送类似 "HTTP/1.1 400 Missing customerNumber parameter" 的回复。

或者我想将 HTTP 状态行修改为类似 227 IM Used 类的内容 - 换句话说: HTTP 状态描述 不同于 Web 服务器知道要发送的内容。

原文由 Adam Crume 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 402
2 个回答

我认为任何 RESTful 客户端都不会期望通过查看原因短语来找出问题所在;我见过/使用过的大多数 RESTful 服务都会在响应正文中发送标准状态信息和扩展消息。 sendError(int, String) 非常适合这种情况。

原文由 Hank Gay 发布,翻译遵循 CC BY-SA 2.5 许可协议

如果您使用的是 Tomcat,请参阅设置 org.apache.coyote.USE_CUSTOM_STATUS_MSG_IN_HEADER:

http://tomcat.apache.org/tomcat-5.5-doc/config/systemprops.html

  • 如果这是真的,自定义 HTTP 状态消息将在 HTTP 标头中使用。用户必须确保任何此类消息都是 ISO-8859-1 编码的,特别是如果用户提供的输入包含在消息中,以防止可能的 XSS 漏洞。如果未指定,将使用默认值 false。

有关原始漏洞的一些详细信息,请参阅此页面:

http://www.securityfocus.com/archive/1/archive/1/495021/100/0/threaded

原文由 ars 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题