Обнаруживать HTTPS с помощью JavaScript
Я пытаюсь найти, как определить с помощью JavaScript, если я в среде HTTP или HTTPS.
Я вызываю запрос Ajax, поэтому, если я нахожусь в HTTPS и вызываю HTTP Ajax, тогда я получаю 302 Moved Temporarily.
Я думал о том, чтобы получить текущий window.location.href
и выполнить строчную манипуляцию.
Каков наилучший способ обнаружения HTTPS с помощью JavaScript?
Ответы
Ответ 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 с строкой, вы должны использовать это.