首页 > 解决方案 > 来自 IE 11 的 Websocket onOpen 后出现 EOF 异常

问题描述

我正在使用带有 javascript 的 javax websocket 服务器。Websocket 连接发生在除 IE 之外的所有其他浏览器上(厌倦了 IE 11 和 10)。调用 onOpen 并发生连接,然后抛出 EOFException 并显示空错误消息。下面是错误的堆栈跟踪

java.io.EOFException
        at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.fillReadBuffer(NioEndpoint.java:1250)
        at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.read(NioEndpoint.java:1190)
        at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:72)
        at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:171)
        at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:151)
        at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:148)
        at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:54)
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:53)
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459)
        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:748)

基本上,我无法弄清楚它是服务器端还是客户端问题。我需要从客户端或服务器引入超时吗?还是连接立即关闭,我需要为此引入一个乒乓框架?请帮帮我!

标签: javascriptjavainternet-explorerwebsocketjava-websocket

解决方案


我找到了解决方案。

基本上,我们需要检查 IE 中的请求和响应标头,请求和响应标头与其他浏览器中的不同。我使用了“sec-webSocket-protocol”,其中此标头的值在其他浏览器中创建了空格,而 IE 11 中没有这样的空格。因此返回我收到的相同标头解决了这个问题


推荐阅读