覆盖HTTP响应状态文本

时间:2013-12-19 16:13:44

标签: java tomcat servlets httpresponse

如何在Tomcat 7中覆盖HttpStatu s。

的文本

我正在使用HttpServletResponse.sendError(401, "Invalid username or Password"),但当我在客户端查看响应状态时,它会发现401 Unauthorized

有没有办法覆盖它?

3 个答案:

答案 0 :(得分:4)

否 - 响应代码根据RFC 2616设置。如果要将消息传达给用户(到API客户端),请将其写入正文或响应标题

答案 1 :(得分:4)

修改catalina.properties并添加属性:

org.apache.coyote.USE_CUSTOM_STATUS_MSG_IN_HEADER=true

在我的开发环境中使用该设置,然后当我这样做时:

response.sendError(HttpServletResponse.SC_BAD_REQUEST, 
                   "A very very very bad request");

我明白了:

HTTP/1.1 400 A very very very bad request
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=utf-8
Content-Language: en
Content-Length: 1024
Date: Fri, 20 Dec 2013 11:09:54 GMT
Connection: close

还讨论了herehere

答案 2 :(得分:4)

Tomcat不再支持 USE_CUSTOM_STATUS_MSG_IN_HEADER属性。

来自8.5.0的更改日志:

  

RFC 7230规定客户端应忽略HTTP / 1.1中的原因短语   回复消息。由于原因短语是可选的,Tomcat没有   更长时间发送它。因此系统属性   org.apache.coyote.USE_CUSTOM_STATUS_MSG_IN_HEADER不再使用   并已被删除。 (Markt的)

RFC 7230,超文本传输​​协议(HTTP / 1.1):消息语法和路由,2014年6月。Section 3.1.2

  

原因 - 短语元素仅用于提供   与数字状态代码关联的文本描述,   主要是出于对早期Internet应用程序协议的尊重   更常用于交互式文本客户端。 :一种   客户端应该忽略原因 - 短语内容