Error parsing HTTP request header

写了个简单的Springboot项目,用到springboot+mysql+mybatis,作简单的微信小程序登录,存储微信用户信息,部署到阿里云 ECS服务器上后,能运行,但是隔一段时间就会报一个这样的错误:

2023-08-18 14:24:22.381  INFO 8428 --- [0.0-8080-exec-3] 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 method name [0x160x030x010x000xee0x010x000x000xea0x030x030xf80x8cM0x1a0xec0x900x930xe30x935Lx0xe70xf93!vHq0xd50xd40xe70xc4s0xa70xb60x980xe80xff0xfc0xca0xe4 ]. HTTP method names must be tokens
    at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:419) ~[tomcat-embed-core-9.0.55.jar!/:na]
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:269) ~[tomcat-embed-core-9.0.55.jar!/:na]
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-9.0.55.jar!/:na]
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895) [tomcat-embed-core-9.0.55.jar!/:na]
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1722) [tomcat-embed-core-9.0.55.jar!/:na]
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.55.jar!/:na]
    at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) [tomcat-embed-core-9.0.55.jar!/:na]
    at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) [tomcat-embed-core-9.0.55.jar!/:na]
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.55.jar!/:na]
    at java.lang.Thread.run(Unknown Source) [na:1.8.0_271]


img

网上的几种类似方法看了,感觉不是我这种问题的原因:1.改大http header size 尝试了 不行;2.请求端用http 不要用https,我是用微信小程序测试,登录的时候里面用http,并没用https,而且上面错误时当时并没有什么做什么操作,都是小程序登录时好好的,过一段时间突然报了这个错误。

【以下回答由 GPT 生成】

该错误是由于HTTP请求头解析错误导致的。可能的原因是在请求中包含了非法字符或者格式不正确的请求头。

解决这个问题的方法如下:

  1. 首先,检查你的代码,确认在处理HTTP请求时没有对请求头进行修改或拼接的操作。确保请求头的格式是正确的,不包含非法字符。

  2. 检查你的前端代码,特别是微信小程序登录功能的代码。确保在发送请求时,请求头的格式是正确的,符合HTTP协议规范。

  3. 检查你的网络环境和网络设备,确认没有代理或防火墙等中间设备对请求头进行修改或阻止的操作。

  4. 检查你的服务器配置,特别是阿里云ECS服务器上的配置。确保服务器的网络配置没有问题,并且没有对请求头进行过滤或修改的配置。

如果以上步骤都没有解决问题,可以尝试以下方法:

  1. 更新你使用的Spring Boot、MySQL和MyBatis的版本,确保它们是最新的稳定版本,可能存在已解决该问题的bug或者改进的功能。

  2. 在项目中添加日志记录功能,特别是记录HTTP请求和响应的详细信息。通过查看日志,可以更准确地判断请求头解析错误的具体原因。

  3. 通过调试工具,如Wireshark等,捕获异常发生时的请求数据包,分析其中的请求头内容,找出导致解析错误的具体原因。

如果以上方法都没有解决问题,可能需要进一步深入分析和调试,包括检查服务器和网络设备的日志、测试不同网络环境下的表现等。

如果你对以上解决方法都已经尝试过,但问题仍然存在,请提供更多详细信息,以便进行进一步的分析和排查。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^