Как определить HTTP или HTTPS, а затем принудительно перенаправить на HTTPS в JavaScript?
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'
) {
req.get(
'host'
) + req.originalUrl);
}
});
- Выход:
// На сайтах HTTP вы будете перенаправлены на версию HTTPS.
Примечание: req.protocol не включает двоеточие (например, http или https ), тогда как window.location.protocol включает (например, http: и https:) .