Tomcat:自定义错误页面,而不是空的响应

时间:2018-09-07 15:44:52

标签: java http tomcat response

某些请求被Tomcat拒绝,并带有 HTTP 400响应。

几个例子:

包含未编码字符(例如,从Tomcat 8.5.x开始为'['或']')的请求url触发:

INFO  o.a.c.h.Http11Processor   Error parsing HTTP request header
 Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.
java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986

例如,当标头大小太大时,也会返回400错误页面:

INFO: Error parsing HTTP request header
Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.
java.lang.IllegalArgumentException: Request header is too large

是否有针对这些错误的自定义错误页面?更一般而言,是当Tomcat触发此HTTP 400响应时。传递空响应是最糟糕的用户体验。我知道应该避免创建此类请求,但是我仍在寻找后备。

我已经在我的(嵌入式)Tomcat上下文中使用ctx.addErrorPage(...)设置了错误代码400的自定义错误页面。

从我的网络应用触发后,它可以正常工作。 例如。将错误处理委托给Servlet错误处理机制时,res.sendError(SC_BAD_REQUEST);-resHttpServletResponse

不幸的是,对于顶部描述的tomcat错误类型,未使用自定义错误页面。

谢谢!

1 个答案:

答案 0 :(得分:0)

这对我也很麻烦。不幸的是,从源头上看,它似乎已经深深地嵌入了Tomcat的内部结构,并且很难轻易更改。

特别是,您注意到的异常会引发org.apache.coyote.http11.Http11InputBuffer,它是Tomcat的Coyote HTTP/1.1 Connector组件之一的一部分(旧文档,较新的文档没有):

  

土狼HTTP / 1.1连接器元素表示连接器组件   支持HTTP / 1.1协议。它使Catalina发挥作用   作为独立的Web服务器,除了能够执行   servlet和JSP页面。

此外,异常以catalina.log结尾并且非常短-将其与从JSP处理器获得的异常大小相比较,其大小是该大小的几倍。

因此,我认为对此进行修补并非易事-至少在没有不了解Tomcat内部知识的情况下(我没有:(