Подтвердить что ты не робот

Обнаруживать HTTPS с помощью JavaScript

Я пытаюсь найти, как определить с помощью JavaScript, если я в среде HTTP или HTTPS.

Я вызываю запрос Ajax, поэтому, если я нахожусь в HTTPS и вызываю HTTP Ajax, тогда я получаю 302 Moved Temporarily.

Я думал о том, чтобы получить текущий window.location.href и выполнить строчную манипуляцию.

Каков наилучший способ обнаружения HTTPS с помощью JavaScript?

4b9b3361

Ответ 1

Вы можете использовать нестандартные

window.location.protocol 

В Firefox: Документация MDC

В IE это выглядит как

 document.location.protocol

Документация MSDN

Я не могу найти надежную информацию о том, как это ведет себя в других браузерах, но я ожидаю, что они будут придерживаться квазистандарта document.location.protocol.

Возможно, jQuery url plugin сортирует это, не имея дело с различиями между браузерами - я никогда не использовал его сам, но это выглядит многообещающе:

jQuery.url.attr("protocol");

Ответ 2

Посмотрите, как Google Analytics добавляет их script на страницу:

ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';

Тогда document.location.protocol будет казаться безопасным для всех браузеров.

Ответ 3

location.protocol работает во всех браузерах.

Ответ 4

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

 var protocol = window.location.href.indexOf("https://")==0?"https":"http";

Ответ 5

Во многих случаях можно вообще отказаться от протокола. Итак, вместо

<img src="https://test.com/image.jpg" />

можно было использовать

<img src="//test.com/image.jpg" />

Затем браузер автоматически добавляет текущий протокол. Это также работает для включения файлов в голову, и он также должен работать для вызовов ajax.

Изменить: теперь это считается анти-шаблоном:

Теперь, когда SSL поощряется для всех и не имеет проблем с производительностью, этот метод теперь является анти-шаблоном. Если необходимый вам ресурс доступен по протоколу SSL, всегда используйте ресурс https://.

Предоставление фрагмента запроса по HTTP открывает дверь для атак, таких как недавняя атака Github Man-on-side. Его всегда безопасно запрашивать активы HTTPS, даже если ваш сайт находится на HTTP, однако обратное неверно.

см. http://www.paulirish.com/2010/the-protocol-relative-url/

Ответ 6

Там действительно чистый lib называется URI для таких вещей. https://github.com/medialize/URI.js

Вам, вероятно, не нужно это просто, чтобы захватить протокол, но если вы собираетесь работать с URI с строкой, вы должны использовать это.