Как определить HTTP или HTTPS, а затем принудительно перенаправить на HTTPS в JavaScript?

Опубликовано: 2 Августа, 2021

HTTPS означает безопасный протокол передачи гипертекста . Как следует из названия, он создает безопасное зашифрованное соединение между браузером пользователя и сервером, к которому он пытается получить доступ. Поскольку это зашифрованное соединение, оно не позволяет злоумышленникам украсть данные, которые передаются из браузера пользователя на сервер. Наличие сайта в HTTPS также говорит пользователям, что они могут доверять вашему сайту. Если у вас есть сайт в HTTP, а также такая же версия в HTTPS, вы можете автоматически перенаправить пользователя на сайт HTTPS.

Для реализации этого перенаправления мы будем использовать код JavaScript. В частности, мы будем использовать свойство window.location.protocol для идентификации протокола, а затем использовать свойство window.location.href для перенаправления браузера. Window.location - это свойство объекта Window. Часто используется для переадресации. Window.location возвращает объект Location , который содержит ряд полезных свойств:

  • протокол: это протокол (http: или https :) текущего URL-адреса окна браузера.
  • href: это полный URL-адрес текущего окна браузера. Он доступен для записи.

Примечание. Поскольку window.location.href доступен для записи, мы установим для него новый URL-адрес и, следовательно, перезагрузим браузер с новым URL-адресом.

  • Пример:




    if (window.location.protocol == 'http:' ) {
    console.log( "you are accessing us via "
    + "an insecure protocol (HTTP). "
    + "Redirecting you to HTTPS." );
    window.location.href =
    window.location.href.replace(
    'http:' , 'https:' );
    }
    else
    (window.location.protocol == "https:" ) {
    console.log( "you are accessing us via"
    + " our secure HTTPS protocol." );
    }
  • Выход:
     // На сайтах HTTP вы будете перенаправлены на версию HTTPS.

Недостатки: установка перенаправления HTTPS со стороны браузера имеет некоторые недостатки. К этим недостаткам можно отнести:

  • Если злоумышленник находится посреди вашего соединения (Man in the Middle Attack), он может предотвратить перенаправление.
  • Во время начальной загрузки HTTP могут быть ранее установленные файлы cookie, которые теперь могут быть прочитаны хакером.

Поэтому мы рекомендуем перенаправлять пользователей через HTTPS на стороне сервера, а не через JavaScript. Ниже мы добавили пример того, как сделать это перенаправление с помощью NodeJS, который является сервером, написанным на Javascript. При использовании NodeJS на сервере код похож, но не совсем такой. Вместо этого мы будем использовать req.protocol.

  • Пример (app.js):




    app.get( '/' , function (req, res, next) {
    if (req.protocol == 'http' ) {
    res.redirect( ' https:// ' +
    req.get( 'host' ) + req.originalUrl);
    }
    });
  • Выход:
     // На сайтах HTTP вы будете перенаправлены на версию HTTPS.

Примечание: req.protocol не включает двоеточие (например, http или https ), тогда как window.location.protocol включает (например, http: и https:) .