Могу ли я изменить все мои ссылки http: // просто на //? - PullRequest
237 голосов
/ 28 января 2011

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

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

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

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

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

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

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

Ответы [ 6 ]

201 голосов
/ 28 января 2011

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

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

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

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

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

30 голосов
/ 16 июня 2011

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

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

15 голосов
/ 28 января 2011

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

4 голосов
/ 06 июня 2016

Это полностью совместимо с браузерами? Есть ли другие предостережения?

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

Microsoft Internet Explorer, кажется, особенно чувствителен к этому, см. Этот вопрос: Невозможно загрузить jQuery в Internet Explorer на локальный хост (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-адресов протокола, см. здесь .

1 голос
/ 26 мая 2017

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

...