Могу ли я изменить все мои ссылки 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 хорошо написал об этом некоторое время назад. Но он потерял свою кучу сообщений в блогах.