java.io.IOException:无法解包数据,无效状态

Posted

技术标签:

【中文标题】java.io.IOException:无法解包数据,无效状态【英文标题】:java.io.IOException: Unable to unwrap data, invalid status 【发布时间】:2017-03-06 11:23:58 【问题描述】:

我正在使用 spring(REST 后端和安全性)和 angularjs 开发 SPA。一切正常,但是当我在本地运行它时,我确实看到了一个错误,不知道为什么会这样。

    2016-10-24 10:43:29.028 DEBUG 8040 --- [io-8443-exec-10] o.apache.coyote.http11.Http11Processor   : Socket: [org.apache.tomcat.util.net.NioEndpoint$NiosocketWrapper@1a572ed1:org.apache.tomcat.util.net.SecureNioChannel@1b7d9385:java.nio.channels.SocketChannel[connected local=/0:0:0:0:0:0:0:1:8443 remote=/0:0:0:0:0:0:0:1:53170]], Status in: [OPEN_READ], State out: [OPEN]
10:43:29.028 [https-jsse-nio-8443-exec-10] DEBUG o.a.coyote.http11.Http11Processor - Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@1a572ed1:org.apache.tomcat.util.net.SecureNioChannel@1b7d9385:java.nio.channels.SocketChannel[connected local=/0:0:0:0:0:0:0:1:8443 remote=/0:0:0:0:0:0:0:1:53170]], Status in: [OPEN_READ], State out: [OPEN]
2016-10-24 10:43:31.949 DEBUG 8040 --- [nio-8443-exec-7] o.apache.coyote.http11.Http11Processor   : Error parsing HTTP request header

java.io.IOException: Unable to unwrap data, invalid status [CLOSED]
    at org.apache.tomcat.util.net.SecureNioChannel.read(SecureNioChannel.java:590)
    at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.fillReadBuffer(NioEndpoint.java:1200)
    at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.read(NioEndpoint.java:1149)
    at org.apache.coyote.http11.Http11InputBuffer.fill(Http11InputBuffer.java:742)
    at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:404)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:667)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:802)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1410)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)

10:43:31.949 [https-jsse-nio-8443-exec-7] DEBUG o.a.coyote.http11.Http11Processor - Error parsing HTTP request header
java.io.IOException: Unable to unwrap data, invalid status [CLOSED]
    at org.apache.tomcat.util.net.SecureNioChannel.read(SecureNioChannel.java:590)
    at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.fillReadBuffer(NioEndpoint.java:1200)
    at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.read(NioEndpoint.java:1149)
    at org.apache.coyote.http11.Http11InputBuffer.fill(Http11InputBuffer.java:742)
    at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:404)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:667)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:802)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1410)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)

如果有人能给我一个起点,我可以做更多的研究。

【问题讨论】:

你找到解决这个问题的办法了吗? 不,我的团队决定停止这个项目。 【参考方案1】:

我们遇到了同样的问题。 事实证明,在服务器端,一个外部事件在调用期间的某个时间点强制关闭了连接,从而导致了这个错误。

【讨论】:

【参考方案2】:

我在使用 tomcat 的 jsr-356 创建 wss(secured) webscoket api 并通过 aws ec2 部署并通过来自 cloudflare 的域进行引用时遇到了同样的问题。 为了解决这个问题,我做了 2 处更改: - 仅在 A 记录中将 cloudflare 代理模式更改为 DNS。 - 购买了新证书并开始使用来自 tomcat 的证书,而不是 cloudflare 的原始 CA 证书。 有关详细步骤,请检查: https://techxperiment.blogspot.com/2020/06/aws-ec2-tomcat-jsr-356-secure.html

【讨论】:

以上是关于java.io.IOException:无法解包数据,无效状态的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio - java.io.IOException:无法生成 v1 签名

带火花的 Cassandra:java.io.IOException:无法在 127.0.0.1:9042 打开到 Cassandra 的本机连接 ::

Windows 上的 Hudson - 错误:java.io.IOException:无法运行程序“sh”

org.gradle.tooling.BuildException:java.io.IOException:无法生成 v1 签名

安装没有成功。无法安装应用程序。 java.io.IOException:仅在内部请求,但空间不足

ant jar 错误:执行失败:java.io.IOException:无法运行程序...$aapt":错误=2,没有这样的文件或目录