gpt4 book ai didi

java - Tomcat:自定义错误页面而不是空响应

转载 作者:可可西里 更新时间:2023-11-01 16:40:07 29 4
gpt4 key购买 nike

一些请求被 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

例如,当 header 太大时,也会返回 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 设置了自定义错误页面。

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

不幸的是,对于顶部描述的那种 tomcat 错误,没有使用自定义错误页面。

谢谢!

最佳答案

这对我来说也是个麻烦。不幸的是,从查看源代码来看,它似乎深入 Tomcat 的内部,并且无法轻易更改。

特别是,您注意到的异常是在 org.apache.coyote.http11.Http11InputBuffer 中抛出的,它是 Tomcat 组件之一的一部分,称为 Coyote HTTP/1.1 Connector。 (旧文档,新文档没有这个):

The Coyote HTTP/1.1 Connector element represents a Connector component that supports the HTTP/1.1 protocol. It enables Catalina to function as a stand-alone web server, in addition to its ability to execute servlets and JSP pages.

此外,异常最终会出现在 catalina.log 中并且非常短 - 将此与您从 JSP 处理器获得异常时相比,后者的大小是它的几倍。

因此,我认为修补此问题并非易事 - 至少在我不了解 Tomcat 内部结构的情况下并非如此 :(

关于java - Tomcat:自定义错误页面而不是空响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52225851/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com