除了postgresql数据库之外,我还有一个使用node.js和socket.io库的Web应用程序。它托管在heroku上。对于socket.io库,如果我运行代码为“http://X”的网站地址,但是当我尝试“https://X”时,我会收到一条错误消息 要修复此错误,我强行将用户重定向到https网站,如果他们访问http版本。这是我执行此操作的代码。
<script>
if (document.URL.indexOf("https") == -1 && document.URL.indexOf("localhost") == -1)
{
window.location.href = document.URL.replace("http", "https");
}
</script>
有什么理由说这是一个坏主意吗?有更好的解决方案吗?任何关于http和https之间区别的评论都将受到赞赏。这是我在http:
上运行网站时遇到的错误WebSocket connection to 'ws://theland.herokuapp.com/socket.io/?EIO=3&transport=websocket&sid=<not sure if I should share this part of the url...>' failed: Error during WebSocket handshake`: 'Sec-WebSocket-Accept' header is missing
为了澄清,该网站现在可以正常使用我的解决方案,但我担心我的解决方案是否是“良好做法”。
感谢您的帮助!
答案 0 :(得分:1)
在客户端,它足以包含没有URL的Socket.IO:
<script src="/socket.io/socket.io.js"></script>
<script> const socket = io(); </script>
另一种选择是使用URL:
wss://yourURL
如果这不起作用,更好的方法是从服务器端重定向,例如:
app.get('/anyURL', (req, res) => {
if (req.headers.host.match(/^www/) !== null || !req.secure) {
return res.redirect('https://' + req.headers.host.replace(/^www\./, '') + req.url);
};
});