Я добавляю внешний файл CSS и внешний файл JS к моим заголовкам и нижним колонтитулам. При загрузке страницы HTTPS некоторые браузеры жалуются, что я загружаю незащищенное содержание.
Существует ли простой способ заставить браузер загрузить внешнее содержание через HTTPS, когда самой страницей является HTTPS?
Использовать пути, относящиеся к протоколу.
Таким образом, не
<link rel="stylesheet" href="http://example.com/style.css">
<script src="http://example.com/script.js"></script>
, а
<link rel="stylesheet" href="//example.com/style.css">
<script src="//example.com/script.js"></script>
, тогда он будет использовать протокол родительской страницы.
Нут и Джеймс Вестгейт правы, комментируя более поздний ответ.
Если мы посмотрим на бессистемные внешние javascript-файлы промышленного уровня, то в наиболее успешных из них будут использоваться как сниффинг document.location.protocol, так и внедрение элементов сценария, чтобы использовать правильный протокол.
Таким образом, вы можете использовать что-то вроде:
<script type="text/javascript">
var protocol = (
("https:" == document.location.protocol)
? "https"
: "http"
);
document.write(
unescape(
"%3Cscript"
+ " src='"
+ protocol
+ "://"
+ "your.domain.tld"
+ "/your/script.js"
+ "'"
+ " type='text/javascript'
+ "%3E"
+ "%3C/script%3E"
) // this HAS to be escaped, otherwise it would
// close the actual (not injected) <script> element
);
</script>
То же самое можно сделать и для внешних включений CSS.
И между прочим: будьте осторожны, используйте только относительный путь url () в вашем CSS, если таковой имеется, иначе вы все равно можете получить предупреждение "смешанный безопасный и небезопасный" ....
Если вы используете относительные пути (и контент находится в том же домене), тогда контент должен использовать тот протокол, в котором была запрошена страница.
Однако, если вы переходите через домен к CDN или сайту ресурсов, или если вам нужно использовать абсолютные пути, вам нужно будет использовать скрипт на стороне сервера для изменения ссылок или всегда использовать https: //