首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Spring中处理tomcat请求解析失败

在Spring中处理tomcat请求解析失败
EN

Stack Overflow用户
提问于 2022-09-20 16:04:26
回答 1查看 77关注 0票数 0

我有一个,它具有一个具有特定错误响应的自定义错误处理。但是,如果我用一个错误的URL调用我的服务器,那么Spring的ErrorController和Spring的@ExceptionHandler都不会被调用。

示例呼叫:

代码语言:javascript
运行
复制
curl 'https://example.com/fail|no'

响应

代码语言:javascript
运行
复制
<!doctype html><html lang="en"><head><title>HTTP Status 400 – Bad Request</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 400 – Bad Request</h1></body></html>

日志输出:

代码语言:javascript
运行
复制
2022-09-20 17:38:29.410 INFO 1 --- [nio-443-exec-1] o.apache.coyote.http11.Http11Processor : Error parsing HTTP request header 
Note: further occurrences of HTTP request parsing errors will be logged at DEBUG level. 
java.lang.IllegalArgumentException: Invalid character found in the request target [/fail|no ]. The valid characters are defined in RFC 7230 and RFC 3986
    at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:502) ~[tomcat-embed-core-9.0.64.jar!/:na]
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:271) ~[tomcat-embed-core-9.0.64.jar!/:na]
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.64.jar!/:na]
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:890) ~[tomcat-embed-core-9.0.64.jar!/:na]
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1787) ~[tomcat-embed-core-9.0.64.jar!/:na]
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.64.jar!/:na]
    at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.64.jar!/:na]
    at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.64.jar!/:na]
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.64.jar!/:na]
    at java.base/java.lang.Thread.run(Unknown Source) ~[na:na]

我希望将错误处理更改为使用与其他错误处理(ErrorController或ExceptionHandler)相同的管道。因此,更改(错误)日志记录和响应。如果不可能,我希望至少返回一个硬编码的JSON响应。

代码语言:javascript
运行
复制
{
    "errorCode": "http.request_parse_error",
    "errorId": "abc-def-ghi"
    ...
}

  • Spring-Boot-Web 2.6
  • 无Thymeleaf或任何其他模板引擎。
EN

回答 1

Stack Overflow用户

发布于 2022-09-20 19:42:13

问题是客户端没有发送正确的HTTP请求。并且您希望使用适当的HTTP响应进行响应。这不管用。

假设有人将JDBC驱动程序配置为连接到Tomcat的http或https端口。当然,这将失败,但不要期望客户机理解任何HTTP响应。在这种情况下,服务器所能做的最好就是挂断。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73789601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档