我首先在 stackoverflow 上问了这个问题,但它看起来更像是一个服务器问题,而不是编码问题。我正在用 Java EE 开发一个项目,我可以访问大学局域网下的服务器计算机。为了提供详细信息,我还在下面添加了我的代码。
我尝试仅在单个页面上通过 WebSocket 连接到服务器。
我的客户端网络套接字:
var socket = new WebSocket("wss://serverName:8181/projectName/actions");
Java 服务器端点:
/actions
使用websocket的URL结构如下:
我的上下文根与项目名称相同。web.xml 文件中的安全约束:
<security-constraint>
<web-resource-collection>
<web-resource-name>SecureResource</web-resource-name>
<url-pattern>/projectName/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
我使用 Glassfish 应用服务器 4.1。该服务器有两个 http 侦听器。关于侦听器:
Http-侦听器-1:监听 8080 端口,未启用安全性,未启用 websocket 支持
Http-侦听器-2:监听 8181 端口,安全已启用,websocket 已启用
两者都启用了 SSL3 和 TLS。我提供服务器详细信息是因为我对服务器问题真的是个新手,所以我不知道这些详细信息是否重要。我在尝试寻找修复程序时还运行了以下命令。但这些命令可能不相关:
asadmin set server.network-config.protocols.protocol.http-listener-1.http.scheme-mapping=X-Forwarded-Proto
asadmin set server.network-config.protocols.protocol.http-listener-2.http.scheme-mapping=X-Forwarded-Proto
我的所有连接都可以在 HTTPS 上运行,没有任何问题。然而,在我使用 websocket 的页面中,我收到此错误:
与 'wss://serverName:8181/projectName/actions' 的 WebSocket 连接失败:建立连接时出错:net::ERR_CONNECTION_REFUSED
我尝试了很多不同的方法。我还尝试了不带端口号的 websocket URI。在服务器计算机上拥有数字证书之前,一切都运行良好。当时我只是使用了“ws”而不是“wss”,并且我在 web.xml 文件中没有安全约束。但是,经过大量阅读和尝试后,我无法在 HTTPS 下提供 websocket 连接。