Есть ли недостаток в использовании двойной косой черты для наследования протокола в URL? т.е. src="//domain.com"
У меня есть таблица стилей, которая загружает изображения из внешнего домена, и мне нужно, чтобы она загружалась с https: // со страниц защищенного заказа и http: // с других страниц на основе текущего URL. Я обнаружил, что запуск URL с двойной косой чертой наследует текущий протокол. Все ли браузеры поддерживают эту технику?
HTML например:
<img src="//cdn.domain.com/logo.png" />
css ex:
.class { background: url(//cdn.domain.com/logo.png); }
6 ответов
Если браузер поддерживает 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), по сути, не имеет URL-адреса, а при просмотре сообщения, содержащего относящийся к протоколу URL-адрес, вообще отсутствует очевидный контекст протокола (само сообщение является независимым). протокола, используемого для его извлечения, будь то POP3, IMAP, Exchange, uucp или что-либо еще), поэтому в URL-адресе нет протокола, относительно которого он должен быть. Я не исследовал совместимость с почтовыми клиентами, чтобы увидеть, что они делают, когда представлены с отсутствующим обработчиком протокола - я предполагаю, что большинство из них примет http. Apple Mail отказывается вводить URL-адрес без протокола. Это аналогично тому, как относительные URL не работают в электронной почте из-за аналогичного отсутствия контекста.
Подобные проблемы могут возникнуть в других не HTTP-контекстах, таких как твиты, SMS-сообщения, документы Word и т. Д.
Более общее объяснение состоит в том, что анонимные URL-адреса протоколов не могут работать изолированно; должен быть соответствующий контекст. Таким образом, на типичной веб-странице нормально использовать библиотеку сценариев, но любые внешние ссылки всегда должны указывать протокол. Я попробовал один простой тест: //stackru.com
карты для file:///stackru.com
во всех браузерах я пробовал, так что они действительно не работают сами по себе.
Причиной может быть предоставление портативных веб-страниц. Если внешняя страница не передается в зашифрованном виде (http), почему связанные сценарии должны быть зашифрованы? Это кажется ненужной потерей производительности. В случае, если внешняя страница надежно транспортируется в зашифрованном виде (https), то связанный контент также должен быть зашифрован. Если страница зашифрована, связанный контент не, IE, кажется, выдает предупреждение о смешанном контенте. Причина в том, что злоумышленник может манипулировать сценариями в пути. См. http://ie.microsoft.com/testdrive/Browser/MixedContent/Default.html?o=1 для более подробного обсуждения.
Кампания HTTPS Everywhere от EFF предлагает по возможности использовать https. В наши дни у нас есть возможности сервера обслуживать веб-страницы в зашифрованном виде.
Просто для полноты. Это было упомянуто в другой теме:
"Две косые черты - это обычное сокращение для любого протокола, который используется правильно"
if (plain http environment) {
use 'http://example.com/my-resource.js'
} else {
use 'https://example.com/my-resource.js'
}
Пожалуйста, проверьте всю ветку.
Кажется, сейчас это довольно распространенная техника. Недостатков нет, это только помогает унифицировать протокол для всех ресурсов на странице, поэтому его следует использовать везде, где это возможно.