【发布时间】:2018-09-07 15:44:51
【问题描述】:
Tomcat 以 empty HTTP 400 响应拒绝了一些请求。
几个例子:
包含未编码字符的请求 url(例如,自 Tomcat 8.5.x 起为“[”或“]”)触发器:
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。
当从我的 webapp 触发时,它可以正常工作。
例如。当将错误处理委托给 servlet 错误处理机制时,res.sendError(SC_BAD_REQUEST); - res 是 HttpServletResponse。
很遗憾,对于顶部描述的那种 tomcat 错误,没有使用自定义错误页面。
谢谢!
【问题讨论】:
-
你看过here吗?
-
是的,但正如我提到的,我的 400 自定义错误页面的配置通常可以正常工作。但是,当 Tomcat 触发我列出的示例中的错误时,不使用它。