org.apache.coyote.http11.Http11Processor.service 解析 HTTP 请求 header 错误 注意:HTTP请求解析错误的进一步发生将记录在DEBUG级别。

26-Oct-2025 08:23:46.134 信息 [catalina-exec-30] org.apache.coyote.http11.Http11Processor.service 解析 HTTP 请求 header 错误 注意:HTTP请求解析错误的进一步发生将记录在DEBUG级别。 java.lang.IllegalArgumentException: 在HTTP协议中发现无效字符[RTSP/1.00x0d0x0a0x0d0x0a...] at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:553) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:271) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:935) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1831) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:973) at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:491) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) at java.base/java.lang.Thread.run(Thread.java:834) 怎么配置禁止以上错误的产生?

这个错误是由于客户端发送了不符合HTTP协议的请求(看起来是RTSP协议)到Tomcat的HTTP端口导致的。要解决这个问题,有几种配置方法:

1. 配置Tomcat的连接器(Connector)

server.xml 中配置Connector来拒绝非法请求:

xml
<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443"
           maxHttpHeaderSize="8192"
           maxPostSize="10485760"
           maxSavePostSize="4096"
           parseBodyMethods="POST,PUT,PATCH"
           allowHostHeaderMismatch="false"
           relaxedPathChars=""
           relaxedQueryChars=""/>

关键参数:

  • relaxedPathCharsrelaxedQueryChars:设置为空字符串,禁用对特殊字符的宽松处理

2. 使用阀门(Valve)过滤请求

server.xml 的 Host 部分添加过滤阀门:

xml
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
       allow="192\.168\.\d+\.\d+|127\.0\.0\.1"
       deny=""/>

或者使用请求过滤阀门:

xml
<Valve className="org.apache.catalina.valves.RequestFilterValve"
       allow=".*"
       deny=".*RTSP.*"/>

3. 配置防火墙规则

阻止非HTTP流量到达Tomcat端口:

bash
# 示例:只允许HTTP流量(端口80/443)
iptables -A INPUT -p tcp --dport 8080 -m string --string "RTSP" --algo bm -j DROP

4. 应用程序层过滤

在web应用的web.xml中添加安全约束:

xml
<security-constraint>
    <web-resource-collection>
        <web-resource-name>Protected Resources</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <user-data-constraint>
        <transport-guarantee>NONE</transport-guarantee>
    </user-data-constraint>
</security-constraint>

5. 修改日志级别(不推荐)

虽然不能阻止错误产生,但可以减少日志输出:

logging.properties 中添加:

properties
org.apache.coyote.level = WARNING
org.apache.catalina.level = WARNING

推荐解决方案

最佳做法是第一种方案,通过配置Tomcat Connector来严格验证HTTP请求。同时建议:

  1. 检查客户端为什么发送RTSP请求到HTTP端口

  2. 确保网络配置正确,RTSP流量应该指向专门的流媒体服务器

  3. 考虑在网络层面隔离不同类型的流量

这种错误通常表明有配置错误或网络扫描活动,从根本上解决问题比单纯抑制错误日志更重要。

posted @ 2025-10-27 09:10  锐洋智能  阅读(0)  评论(0)    收藏  举报