当前位置: 首页 > 知识库问答 >
问题:

如何修复“HTTP11NIOProtocol:读取请求时出错,已忽略”

严承允
2023-03-14

在使用SSL的azure kubernetes服务上运行时,我的spring-boot应用程序在tomcat服务器中使用NPE启动后失败。

首先,什么能成功工作:我用Spring Initializr创建了一个最小的Spring-boot应用程序:

    null

我想将它与azure Cloud上的kubernetes集群一起使用。为此,我有一个Azure Kubernetes服务(AKS)。我使用jib构建docker映像。到目前为止,一切正常。我可以将我的docker映像部署到azure docker注册表中,启动一个kubernetes集群(有一个节点),然后调用“http://public-ip:8443/hello”后得到我的“Hello世界”。我使用端口8443,但使用普通http来确保这个端口不是我的问题的根源。

我希望我的应用程序支持HTTPS,因此我用keytool制作了一个自签名证书(就像这里描述的:在Spring Boot2.0中启用HTTPS with self-signed certificate)。这在localhost上运行良好。它也可以在运行在localhost上的minikube内部工作。但是当我在AKS上使用docker映像时,我的应用程序在启动后几秒钟就失败了。

我已激活

logging.level.org.apache.tomcat=DEBUG
logging.level.org.apache.catalina=DEBUG
2019-09-19 08:22:51.291  INFO 1 --- [           main] com.example.demo.DemoApplication         : Started DemoApplication in 9.623 seconds (JVM running for 10.419)
2019-09-19 08:22:53.775 DEBUG 1 --- [o-8443-Acceptor] o.apache.tomcat.util.threads.LimitLatch  : Counting up[https-jsse-nio-8443-Acceptor] latch=1
2019-09-19 08:22:58.764 DEBUG 1 --- [o-8443-Acceptor] o.apache.tomcat.util.threads.LimitLatch  : Counting up[https-jsse-nio-8443-Acceptor] latch=2
2019-09-19 08:22:58.793 DEBUG 1 --- [nio-8443-exec-1] org.apache.tomcat.util.modeler.Registry  : Managed= Tomcat:type=RequestProcessor,worker="https-jsse-nio-8443",name=HttpRequest1
2019-09-19 08:22:58.793 DEBUG 1 --- [nio-8443-exec-1] org.apache.tomcat.util.modeler.Registry  : Looking for descriptor 
2019-09-19 08:22:58.793 DEBUG 1 --- [nio-8443-exec-1] org.apache.tomcat.util.modeler.Registry  : Introspecting 
2019-09-19 08:22:58.793 DEBUG 1 --- [nio-8443-exec-1] m.m.MbeansDescriptorsIntrospectionSource : Introspected attribute virtualHost public java.lang.String org.apache.coyote.RequestInfo.getVirtualHost() null
<snipped 20 lines of "Introspected attribute xyz">
2019-09-19 08:22:58.796 DEBUG 1 --- [nio-8443-exec-1] m.m.MbeansDescriptorsIntrospectionSource : Introspected attribute lastRequestProcessingTime public long org.apache.coyote.RequestInfo.getLastRequestProcessingTime() public void org.apache.coyote.RequestInfo.setLastRequestProcessingTime(long)
2019-09-19 08:22:58.796 DEBUG 1 --- [nio-8443-exec-1] m.m.MbeansDescriptorsIntrospectionSource : Introspected attribute errorCount public int org.apache.coyote.RequestInfo.getErrorCount() public void org.apache.coyote.RequestInfo.setErrorCount(int)
2019-09-19 08:22:58.796 DEBUG 1 --- [nio-8443-exec-1] m.m.MbeansDescriptorsIntrospectionSource : Setting name: org.apache.coyote.RequestInfo
2019-09-19 08:22:58.797 DEBUG 1 --- [nio-8443-exec-1] o.a.tomcat.util.modeler.BaseModelMBean   : preRegister org.apache.coyote.RequestInfo@21c6ab25 Tomcat:type=RequestProcessor,worker="https-jsse-nio-8443",name=HttpRequest1
2019-09-19 08:22:58.797 ERROR 1 --- [nio-8443-exec-1] o.a.coyote.http11.Http11NioProtocol      : Error reading request, ignored

java.lang.NullPointerException: null
    at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.getSslSupport(NioEndpoint.java:1392) ~[tomcat-embed-core-9.0.24.jar:9.0.24]
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:853) ~[tomcat-embed-core-9.0.24.jar:9.0.24]
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1593) ~[tomcat-embed-core-9.0.24.jar:9.0.24]
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.24.jar:9.0.24]
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.24.jar:9.0.24]
    at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]

共有1个答案

司寇烨伟
2023-03-14

这是Apache Tomcat 9.0.24中的一个已知错误。它通过向启用TLS的连接器发送纯文本来触发。忽略它是安全的,但由于它相当嘈杂,您可能想要升级到最近发布的9.0.26版本,该版本已经解决了这一问题。

 类似资料:
  • 我无法打开这个pdf文件在acrobat reader它告诉我错误(法语)没有代码错误。当acrobat reader中opne pdf文件时,如何获取更多关于错误警报的信息,是否有快捷方式显示更多关于错误的信息,因为目前只有法语: “读取文档时出错,可能已损坏,无法修复” 在chrome pdf viewer中,我可以打开这个错误-original.pdf ps:这里是另一个OK-Origina

  • 问题内容: 我正在用golang编写HTTP处理程序的单元测试。在查看代码覆盖率报告时,我遇到了以下问题:从请求中读取请求正文时,可能会返回我需要处理的错误。但是,当我为我的处理程序编写单元测试时,我不知道如何以触发该错误的方式将请求发送到我的处理程序(内容的结尾过早似乎不会产生这样的错误,但是会在解体身体)。这就是我想要做的: 我该如何为不存在的情况编写测试用例? 问题答案: 您可以创建和使用伪

  • 问题内容: 我使用Elasticsearch-1.1.0为推文编制了索引。索引过程可以。然后我升级了版本。现在我使用Elasticsearch-1.3.2,并且我随机收到此消息: 随机性快照: 有人可以指出如何解决该问题吗? 非常感谢你。 问题答案: 很难给出直接答案,因为您看到的错误可能与您使用的客户端有关。但是,解决方案可能是以下之一: 1.通过传递timeout参数在创建ES客户端时全局增加

  • 我使用Elasticsearch-1.1.0对推文进行索引。索引过程还可以。然后我升级了版本。现在我使用Elasticsearch-1.3.2,我随机得到这条消息: 随机性快照: 有人能指出如何解决问题吗? 谢谢您们。

  • 我有一个API,访问该API的人必须传递一个授权令牌,所以我的问题是如何从头中获取该认证令牌?

  • 问题内容: 我有一个RESTful服务器,该服务器从客户端接收http POST输入以投票表决服务器上的歌曲。我已经使用Apache HTTPClient作为客户端。 当我连续点击投票按钮时,经过几次投票(例如7-8),我得到了例外。当我搜索原因时,我发现这是因为客户端在超时期间没有得到服务器响应。但是问题是,当我使用其他应用程序(例如Chrome REST Console或JMeter)时,可以