可以从http进行https重定向吗?

时间:2018-06-12 01:23:47

标签: html node.js http https socket.io

除了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

为了澄清,该网站现在可以正常使用我的解决方案,但我担心我的解决方案是否是“良好做法”。

感谢您的帮助!

1 个答案:

答案 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);
    };
});