我有一个,它具有一个具有特定错误响应的自定义错误处理。但是,如果我用一个错误的URL调用我的服务器,那么Spring的ErrorController
和Spring的@ExceptionHandler
都不会被调用。
示例呼叫:
curl 'https://example.com/fail|no'
响应
<!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>
日志输出:
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响应。
{
"errorCode": "http.request_parse_error",
"errorId": "abc-def-ghi"
...
}
发布于 2022-09-20 19:42:13
问题是客户端没有发送正确的HTTP请求。并且您希望使用适当的HTTP响应进行响应。这不管用。
假设有人将JDBC驱动程序配置为连接到Tomcat的http或https端口。当然,这将失败,但不要期望客户机理解任何HTTP响应。在这种情况下,服务器所能做的最好就是挂断。
https://stackoverflow.com/questions/73789601
复制相似问题