Есть ли какой -либо недостаток для использования ведущей двойной срезки, чтобы унаследовать протокол в URL? т.е. src = «// domain.com»

StackOverflow https://stackoverflow.com/questions/4659345

  •  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'
}

Пожалуйста, проверьте полную ветку.

Кажется, сейчас это довольно распространенная техника. Нет недостатка, он только помогает объединить протокол для всех активов на странице, поэтому его следует использовать везде, где это возможно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top