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

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

Неточное чтение, но раздел 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.

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

Ответ 1

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

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

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

Ответ 2

Вопрос о том, можно ли изменить все свои ссылки для относительного протокола, может быть спорным, учитывая вопрос о том, нужно ли это делать. Согласно Paul Irish:

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

Ответ 3

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

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

Ответ 4

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

Ответ 5

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

Просто, чтобы бросить это в миксе, если вы работаете на локальном сервере, это может не сработать. Вам нужно указать схему, в противном случае браузер может предположить, что 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>

Я отправил этот ответ здесь.

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

Ответ 6

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