Можно ли перенаправлять https с http? - PullRequest
0 голосов
/ 12 июня 2018

У меня есть веб-приложение, которое использует node.js и библиотеку socket.io в дополнение к базе данных postgresql.Он размещен на героку.Для библиотеки 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 голосов
/ 12 июня 2018

На стороне клиента достаточно включить Socket.IO без URL:

<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);
    };
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...