WebSocket 错误:net::ERR_SSL_PROTOCOL_ERROR

我刚刚使用 Let's Encrypt SSL 证书(非自签名)在本地服务器(Xampp 环境,Windows)上创建了一个 PHP Web 服务器,因此我的网站https://example.it看起来像是每个浏览器的有效证书。我可以使用标准端口使用 http:// 和 https:// 导航到它。


现在我正在实现用于创建网络聊天的 php 套接字,但是如果我在 HTTP 上使用不安全的网络套接字协议:


ws://example.it:8090/chat/php-socket.php


有用。


如果我通过 HTTPS 使用安全 Web 套接字协议:


wss://example.it:8090/chat/php-socket.php


我在建立连接时收到错误 net::ERR_SSL_PROTOCOL_ERROR


如果有人需要,这是我的代码:


$(document).ready(function(){

        var websocket = new WebSocket("wss://example.it:8090/chat/php-socket.php");

        websocket.onopen = function(event) {

            showMessage("<div class='chat-connection-ack'>Connssione stabilita.</div>");

        }

        websocket.onmessage = function(event) {

            var Data = JSON.parse(event.data);

            console.log(Data);

            showMessage("<div class='"+Data.message_type+"'>"+Data.message+"</div>");

            $('#chat-message').val('');

        };

});


繁花如伊
浏览 1188回答 1
1回答

慕神8447489

您正在尝试使用相同的端口 (8090)ws://和wss://- 这很可能不起作用。虽然您没有显示任何服务器端配置,但我怀疑您在端口 8090 上的 websocket 服务器只能执行普通 WebSockets(即ws://而不是wss://),并且您希望来自 HTTP 服务器(端口 443)的 TLS 神奇地应用于wss://端口8090也是。不是这种情况。通过尝试wss://使用端口 8090,您改为尝试与不使用 TLS 的服务器进行 TLS 握手,这会导致net::ERR_SSL_PROTOCOL_ERROR.常见的设置是使用像 nginx 或 Apache 这样的 web 服务器作为 websocket 服务器的反向代理,并在 web 服务器上终止 TLS。这样ws://,wss://从外部在标准端口(即 80 和 443)上工作,并且端口 8090 上的互联网普通 websocket 服务器将无法从外部访问。例如,参见NGINX 以反向代理 websocket 并启用 SSL (wss://)?或通过 SSL 使用 Apache 反向代理的 WebSocket 来了解如何设置这样的东西。
打开App,查看更多内容
随时随地看视频慕课网APP