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

2022-08-31 22:09:08

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

根据Javadoc的说法,“由于消息参数的含义不明确”而被弃用。HttpServletResponse.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服务器知道发送的内容不同。


答案 1

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


答案 2

如果您使用的是 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


推荐