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


Дэйв Уорд говорит,

Это не совсем легкое чтение, но раздел 4.2 RFC 3986 предоставляет для полных URL-адресов, которые пропускают протокол (HTTP или HTTPS) в целом. Если протокол URL-адреса опущен, браузер использует вместо него протокол базового документа.

проще говоря, эти URL-адреса без протокола позволяют такой ссылке работать в каждом браузере, в котором вы ее попробуете:

//ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js

сначала это выглядит странно, но этот URL-адрес без протокола-лучший способ ссылаться на сторонний контент, доступный как через HTTP, так и через HTTPS.

это, безусловно, решит кучу ошибок смешанного контента, которые мы видим на страницах HTTP, предполагая, что наши активы доступны как через HTTP, так и через HTTPS.

это полностью кросс-браузер совместимый? Есть ли другие предостережения?

6 235

6 ответов:

Я тщательно проверил его перед публикацией. Из всех браузеров, доступных для тестирования против on Browsershots, я мог найти только один, который не обрабатывал относительный URL-адрес протокола правильно: неясный браузер * nix под названием Дилло.

есть два недостатка, о которых я получил обратную связь:

  1. URL-адреса без протокола могут работать не так, как ожидалось, когда вы "открываете" локальный файл в своем браузере, потому что базовый протокол страницы будет папка.///: Особенно, когда вы используете URL-адрес без протокола для внешнего ресурса, такого как ресурс, размещенный на CDN. Использование локального веб-сервера, такого как Apache или IIS, для тестирования против http://localhost адреса работает нормально, хотя.
  2. по-видимому, есть по крайней мере одно приложение для чтения фидов iPhone, которое не обрабатывает URL-адреса без протокола правильно. Я не знаю, у кого из них есть проблема или насколько она популярна. Для размещения файла JavaScript это не большая проблема, так как RSS читатели обычно игнорируют содержимое JavaScript в любом случае. Тем не менее, это может быть проблемой, если вы используете эти URL-адреса для медиа, таких как изображения внутри контента, который должен быть синдицирован через RSS (хотя, это одно приложение для чтения на одной платформе, вероятно, составляет очень незначительное количество читателей).

вопрос о том, один может изменить все их ссылки на протокол-относительный может быть спорным, учитывая вопрос о том, является ли один должны сделать так. Согласно Пол Ирландских:

2014.12.17: теперь, когда SSL поощряется для всех и не имеет проблем с производительностью, этот метод теперь является анти-шаблоном. Если актив, который вам нужен, доступен на SSL, а затем всегда использовать https:// имущество.

Если вы используете URL-адреса без протокола для загрузки таблиц стилей, IE 7 & 8 загрузит их дважды: http://www.stevesouders.com/blog/2010/02/10/5a-missing-schema-double-download/

Итак, этого следует избегать для CSS, если вам нравится хорошая производительность.

Да, ссылки на сетевой путь уже были указаны в RFC 1808 и должен работать со всеми браузерами.

это полностью кросс-браузер совместимый? Есть ли другие предостережения?

просто чтобы бросить это в микс, если вы разрабатываете на локальном сервере, это может не сработать. Вам нужно указать схему, иначе браузер может предположить, что src="//cdn.example.com/js_file.js" и src="file://cdn.example.com/js_file.js", который сломается, так как вы не размещаете этот ресурс локально.

Microsoft Internet Explorer, похоже, особенно чувствителен к этому, см. Этот вопрос:не в состоянии загрузите jQuery в Internet Explorer на localhost (WAMP)

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

решение используется HTML5Boilerplate должен иметь резервный вариант, когда ресурс не загружен правильно, но это работает только при включении проверки:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<!-- If jQuery is not defined, something went wrong and we'll load the local file -->
<script>window.jQuery || document.write('<script src="js/vendor/jquery-1.10.2.min.js"><\/script>')</script>

я опубликовал этот ответ здесь как что ж.

обновление: HTML5Boilerplate теперь использует <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"> после принятия решения об устаревании относительных URL-адресов протокола см. здесь.

У меня не было этих проблем при использовании ://domain.com -но вам нужно добавить двоеточие в начале. Йоаст хорошо писать об этом некоторое время назад. Но он потерялся в его куче сообщений в блоге.