2013-12-19 102 views
2

如何在Tomcat 7中覆盖HttpStatu的文本。覆盖HTTP响应状态文本

我使用的是HttpServletResponse.sendError(401, "Invalid username or Password"),但是当我在客户端查看响应状态时,它欢迎401 Unauthorized

有什么方法可以覆盖它吗?

+0

可能重复[“如何显示用户友好的错误页面...”](http://stackoverflow.com/questions/2748220/how-to-show-user-friendly-error-page-代替-的-Tomcat的对数与堆叠-痕量在-b)。 – dcsohl

+0

@dcsohl不重复。这个问题是关于HTTP头。另一个是关于自定义错误页面。 – Javier

回答

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

+0

谢谢,它为我工作 – Cristi

+0

这可能不相关,但一些客户端(例如iOS Safari不会尊重你的自定义responseText) – roo2

4

否 - 响应代码是根据RFC 2616如果要的消息传达给用户(在API客户端)或者它在体内或在响应报头

+3

确实,响应代码在RFC中指定,但“Reason Phrase”(这是问题的关键)可以是任何你喜欢的。 (参见[rfc2616第6.1.1节](http://tools.ietf.org/html/rfc2616#section-6.1.1)“这里列出的短语只是建议 - 它们可能会被当地的等同物替代,而没有影响协议。“ –

3

的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

原因短语元件存在的唯一目的提供 与数字状态代码 相关的文本描述大多不考虑早期的互联网应用协议 ,这些协议更常用于交互式文本客户端。 A 客户端应该忽略原因短语内容