Tomcat 8.0.x Websockets,SSL和Windows - >最后一帧延迟了

时间:2015-10-28 13:33:32

标签: java tomcat ssl websocket internet-explorer-11

1 / 安装最新版本的tomcat(8.0.28)并在java 8上运行它(我使用的是1.8.0_45 / 64-Bit版本)。 我在Windows 7 64位上运行Tomcat

2 /在Tomcat上启用SSL:  通过创建密钥库并取消注释server.xml文件中的https连接器来激活SSL,添加     keystoreFile =“”keystorePass =“”     到连接器。 仅供参考:这是我的连接器:

   <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS"  
               keystorePass="password" 
               keystoreFile="/path/to/my/keystore" />

3 /安装Fiddler(www.telerik.com/fiddler)或任何其他工具来嗅探主机和服务器之间的流量,小提琴应该在您的主机上运行。我用Fiddler做了我的屏幕截图。

4 / 转到tools / options / https并选中“启用解密”。

5 / 使用Internet Explorer 11(chrome也可以,但是因为它压缩了websocket流量,因此很难达到8KB的数据),使用https远程访问tomcat并在https://server:8443/examples/websocket/echo.xhtml打开示例应用程序

选择“Programmatic API”,点击“Connect”,然后发送一条小测试消息

在fiddler上,双击websocket会话并查看websocket选项卡中的结果。

现在,尝试发送一个20KB的大文本,你会看到回复被分成8KB标记为“Continuation”的帧。应该有一个标有“最终”的框架,此时此处缺失。

发送另一条小消息,以便刷新丢失的帧。

重要的:

如果我连接到在我的主机上本地运行的Tomcat,我不会重现此问题。 如果我不使用SSL,我不会重现此问题。

问题: - 为什么这样的行为,有没有人经历过同样的事情? - 如何正确解决此问题? - 我尝试启用Tomcat日志记录,但在日志记录中没什么好处的:org.apache.tomcat.websocket.level = FINE

问题显然与操作系统有关: 当Tomcat在Windows 7上时,它不起作用 当Tomcat在Windows 10上时,它可以工作 当Tomcat在Windows Server 2012 R2上时,它可以正常工作

简而言之,这个问题是OS(某些版本的Windows)/ SSL和WebSockets的组合。

enter image description here

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:0)

&#34;脏&#34;我现在发现的解决方法是发送最后一条消息来刷新缓冲区,因为我可以访问服务器端的代码。

如果您遇到这样的问题,请告诉我,因为这可能与某些特定Windows版本的SSL握手有关,而且我不知道如何解决问题。