[英]WebSocket error: net::ERR_SSL_PROTOCOL_ERROR
我刚刚在本地服务器(Xampp 环境,Windows)上创建了一个 PHP Web 服务器,使用 Let's Encrypt SSL 证书(非自签名),所以我的网站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
我在建立连接网络时收到错误::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('');
};
});
您正在尝试为ws://
和wss://
使用相同的端口 (8090) - 这很可能不起作用。 虽然您没有显示任何服务器端配置,但我怀疑您在端口 8090 上的 websocket 服务器只能执行普通的 WebSockets(即ws://
而不是wss://
)并且您期望来自 HTTP 服务器的 TLS(端口 443 ) 也可以神奇地应用于端口 8090 上的wss://
。 不是这种情况。 通过使用端口 8090 尝试wss://
,您实际上是在尝试与不使用 TLS 的服务器进行 TLS 握手,然后导致net::ERR_SSL_PROTOCOL_ERROR
。
常见的设置是使用像 nginx 或 Apache 这样的 web 服务器作为 websocket 服务器的反向代理,并在 web 服务器上终止 TLS。 这样ws://
和wss://
可以从外部在标准端口(即 80 和 443)上工作,并且端口 8090 上的 Internet 普通 websocket 服务器将从外部无法访问。 请参阅例如NGINX 以反向代理 websockets 并启用 SSL (wss://)? 或WebSocket 通过 SSL 和 Apache 反向代理,了解如何设置类似的东西。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.