某些请求被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);
-res
为HttpServletResponse
。
不幸的是,对于顶部描述的tomcat错误类型,未使用自定义错误页面。
谢谢!
答案 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内部知识的情况下(我没有:(