Обнаружить HTTP или HTTPS, а затем принудительно включить HTTPS в JavaScript - PullRequest
258 голосов
/ 18 января 2011

Есть ли способ обнаружить HTTP или HTTPS и затем принудительно использовать HTTPS с JavaScript?

У меня есть несколько кодов для обнаружения HTTP или HTTPS, но я не могу заставить его использовать https:.

Я использую свойство window.location.protocol , чтобы установить для сайта значение https:, затем обновляю страницу, чтобы, надеюсь, перезагрузить новый https-адрес, загруженный в браузер..

if (window.location.protocol != "https:") {
   window.location.protocol = "https:";
   window.location.reload();
}

Ответы [ 10 ]

430 голосов
/ 18 января 2011

Попробуйте это

if (location.protocol != 'https:')
{
 location.href = 'https:' + window.location.href.substring(window.location.protocol.length);
}
46 голосов
/ 06 апреля 2012

Настройка location.protocol позволяет перейти к новому URL-адресу . Не нужно ничего анализировать / нарезать.

if (location.protocol !== "https:") {
  location.protocol = "https:";
}

Firefox 49 содержит ошибку , где https работает, а https: - нет. Сказано, что * Firefox исправлено 54 .

19 голосов
/ 07 июля 2012

Это плохая идея, потому что вы просто временно перенаправляете пользователя на https, а браузер не сохраняет это перенаправление.

Вы описываете задачу для веб-сервера (apache, nginx и т. Д.) http 301, http 302

13 голосов
/ 18 января 2011

Как насчет этого?

if (window.location.protocol !== 'https:') {
    window.location = 'https://' + window.location.hostname + window.location.pathname + window.location.hash;
}

В идеале вы бы сделали это на стороне сервера.

11 голосов
/ 10 января 2014
if (location.protocol == 'http:')
  location.href = location.href.replace(/^http:/, 'https:')
4 голосов
/ 02 января 2016

Не Javascript способ ответить на этот вопрос, но если вы используете CloudFlare, вы можете написать правила страницы , которые намного быстрее перенаправляют пользователя на HTTPS, и это бесплатно. Выглядит это в правилах страницы CloudFlare:

enter image description here

0 голосов
/ 27 июня 2019

Функциональный способ

window.location.protocol === 'http:' && (location.href = location.href.replace(/^http:/, 'https:'));
0 голосов
/ 19 июня 2017

Я только что проверил все варианты сценариев, протестированные Pui Cdm , включил ответы выше и многие другие, используя php, htaccess, конфигурацию сервера и Javascript, в результате скрипт

<script type="text/javascript">        
function showProtocall() {
        if (window.location.protocol != "https") {
            window.location = "https://" + window.location.href.substring(window.location.protocol.length, window.location.href.length);
            window.location.reload();
        }
    }
    showProtocall();
</script> 

предоставляется vivek-srivastava работает лучше всего, и вы можете добавить дополнительную безопасность в сценарии Java.

0 голосов
/ 06 августа 2016

Привет, я использовал это решение работает отлично. Не нужно проверять, просто используйте https.

<script language="javascript" type="text/javascript">
document.location="https:" + window.location.href.substring(window.location.protocol.length, window.location.href.length);
</script>
0 голосов
/ 01 октября 2014
<script type="text/javascript">
        function showProtocall() {

            if (window.location.protocol != "https") {
                window.location = "https://" + window.location.href.substring(window.location.protocol.length, window.location.href.length);
                window.location.reload();
            }
        }
        showProtocall();
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...