Перезагрузка HTTP в HTTPS (таблицы стилей, js, css-sprites и т. Д.) - PullRequest
5 голосов
/ 01 сентября 2011

Этот вопрос не имеет ничего общего с ошибкой смешанного содержимого. О запуске сайта. Когда я перемещаюсь от http://example.com до https://example.com,, я замечаю, что css / js / etc перезагружается, поскольку я использую корневые относительные пути:.

Используя http sniffer, я вижу, что браузер думает, что https://www.example.com/_css/main.css отличается от http://www.example.com/_css/main.css (его нет). Таким образом, один и тот же точный контент загружается дважды, в результате чего сайт выглядит медленным при переходе с http на https (если у пользователя еще нет кэшированных версий).

Есть ли способ остановить это? Пользователь почти всегда сначала запускает версию сайта, отличную от ssl, поэтому существует ли сценарий, который будет ждать загрузки содержимого http, чем, возможно, принудительно заставить версию https помещаться в кэш пользователей? Или я должен просто использовать абсолютные пути (https://www.example.com/_css/main.css) на каждой странице и на каждом фоновом изображении CSS (только 2 я использую спрайты). Или мы просто живем с этим? Спасибо.

Ответы [ 5 ]

4 голосов
/ 01 сентября 2011

Используя http sniffer, я вижу, что браузер думает, что https://www.mysite.com/_css/main.css отличается от http://www.mysite.com/_css/main.css (его нет).

Это другой ресурс с идентичным контентом. Браузер не может знать, что они будут иметь одинаковый контент.

Вы можете перенаправить (с помощью 301) с одного на другой, чтобы у вас не была версия без SSL.

Есть что-нибудь, чтобы остановить это?

Не совсем.

Пользователь почти всегда сначала запускает не-ssl-версию сайта, поэтому есть ли скрипт, который будет ждать загрузки http-контента, чем, возможно, принудительно заставить версию https в кеш пользователей?

Нет. Было бы ужасной проблемой безопасности, если бы URL мог предварительно кэшировать контент для произвольных других URL.

Или я должен просто использовать абсолютные пути (https://www.mysite.com/_css/main.css) на каждой странице и на каждом фоновом изображении CSS (только 2 я использую спрайты).

Это бы сработало, но привело к смешанным проблемам с контентом.

Или мы просто живем с этим?

Да.

1 голос
/ 01 сентября 2011

Есть несколько способов исправить это.

  1. Используйте базовый тег . Затем используйте относительные пути для своих ресурсов, и кеширование будет восприниматься как работающее для http и https, хотя на самом деле оно уже загружено только по https. Демонстрация

    <base href="https://example.com/" />

  2. Перенаправление всего на SSL, когда пользователь попадает на сайт способом Apache ( Перенаправление SSL )

    Redirect permanent / https://example.com/login

0 голосов
/ 13 июля 2013

Использовать относительные к протоколу пути.

Вместо этого

<link rel="stylesheet" href="http://domain.com/style.css">
<link rel="stylesheet" href="https://domain.com/style.css"> 

используйте это

<link rel="stylesheet" href="//domain.com/style.css">

тогда он будет использовать протокол родительской страницы.

0 голосов
/ 01 сентября 2011

Вы можете использовать .htaccess RewriteRule для загрузки содержимого https каждый раз;или заголовок перенаправления, указанный в http-версии html, будет работать медленнее (без дополнительной обработки), но в противном случае, я полагаю, также.

0 голосов
/ 01 сентября 2011

Вы можете ссылаться на файлы без спецификатора протокола, например:

<link rel="stylesheet" type="text/css" href="//mysite.com/_css/main.css" />

См. Этот пост для получения более подробной информации:

Могу ли я изменить все мои ссылки http: //просто //?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...