Есть ли какой -либо недостаток для использования ведущей двойной срезки, чтобы унаследовать протокол в URL? т.е. src = «// domain.com»
-
09-10-2019 - |
Вопрос
У меня есть таблица стилей, которая загружает изображения из внешнего домена, и мне нужно, чтобы они загружались с https: // с безопасных страниц заказа и http: // с других страниц, на основе текущего URL. Я обнаружил, что запуск URL с двойной чертой наследует текущий протокол. Поддерживают ли все браузеры эту технику?
HTML Ex:
<img src="//cdn.domain.com/logo.png" />
CSS Ex:
.class { background: url(//cdn.domain.com/logo.png); }
Решение
Если браузер поддерживает RFC 1808 Раздел 4, RFC 2396 Раздел 5.2, или RFC 3986 Раздел 5.2, тогда он действительно будет использовать схему URL страницы для ссылок, которые начинаются с «//».
Другие советы
При использовании на link
или @import
, IE7/IE8, будет загружать файл дважды за http://paulirish.com/2010/the-protocol-relative-url/
Обновление с 2014 года:
Теперь, когда SSL поощряется для всех и У него нет проблем с производительностью, Эта техника сейчас анти-паттерн. Анкет Если необходимый вам активы доступны на SSL, то всегда использовать
https://
актив.
Один недостаток происходит, если ваши URL -адреса просмотрены вне контекста веб -страницы. Например, электронное сообщение, расположенное в почтовом клиенте (скажем, Outlook) протокола, используемого для его извлечения, будь то POP3, IMAP, Exchange, UUCP или что -то в этом роде), поэтому URL не имеет протокола, чтобы быть относительно. Я не исследовал совместимость с почтовыми клиентами, чтобы увидеть, что они делают, когда представлены пропавшим обработчиком протокола - я предполагаю, что большинство из них догадается на HTTP. Apple Mail отказывается позволить вам ввести URL без протокола. Это аналогично тому, как относительные URL -адреса не работают по электронной почте из -за аналогичного отсутствующего контекста.
Подобные проблемы могут возникнуть в других не HTTP-контекстах, таких как в твитах, SMS-сообщения, документы Word и т. Д.
Более общее объяснение состоит в том, что URL -адреса анонимного протокола не могут работать изолированно; там должен быть соответствующим контекстом. На типичной веб -странице, таким образом, можно так хорошо протянуть в библиотеку сценариев, но любые внешние ссылки всегда должны указывать протокол. Я попробовал один простой тест: //stackoverflow.com
карты file:///stackoverflow.com
Во всех браузерах я попробовал это, так что они В самом деле Не работай сами.
Причина может заключаться в предоставлении портативных веб -страниц. Если внешняя страница не транспортируется зашифрована (HTTP), почему связанные сценарии должны быть зашифрованы? Кажется, это ненужная потеря эффективности. В случае, если внешняя страница надежно транспортируется зашифрована (HTTPS), то связанный содержимый также должен быть зашифрован. Если страница зашифрована, не связанный контент не, т.е., похоже, выпускает Смешанный контент предупреждение. Причина в том, что злоумышленник может манипулировать сценариями на пути. Видеть http://ie.microsoft.com/testdrive/browser/mixedcontent/default.html?o=1 Для более длинного обсуждения.
А Https везде Кампания от EFF предлагает использовать HTTPS, когда это возможно. В наши дни у нас есть емкость сервера, чтобы обслуживать веб -страницы, всегда зашифрованные.
Просто для полноты. Это было упомянуто в другой ветке:
«Две прямые перерывы являются общим сокращением для любого протокола, используемого правильно»
if (plain http environment) {
use 'http://example.com/my-resource.js'
} else {
use 'https://example.com/my-resource.js'
}
Пожалуйста, проверьте полную ветку.
Кажется, сейчас это довольно распространенная техника. Нет недостатка, он только помогает объединить протокол для всех активов на странице, поэтому его следует использовать везде, где это возможно.