URI, начинающийся с двух слешей... как они себя ведут?
В последнее время я видел рабочие кодовые блоки, как это:
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
И в соответствии с RFC 2396 (синтаксис URI) и RFC 2616 (HTTP 1.1) эти URI, начинающиеся с двух косых черт, действительны, но, к сожалению, RFC на самом деле их не объясняют.
Может кто-нибудь указать мне на ресурс, который объясняет, как браузеры будут / должны / делать эти URI?
4 ответа
Ресурс, который вы ищете - RFC 3986.
См. Раздел 4.2 и раздел 5.4. Цитирую последнее:
Примеры справочного разрешения
В представлении с четко определенным базовым URI:
http://a/b/c/d;p?q
относительная ссылка преобразуется в целевой URI следующим образом:
"g:h" = "g:h" "g" = "http://a/b/c/g" "./g" = "http://a/b/c/g" "g/" = "http://a/b/c/g/" "/g" = "http://a/g" "//g" = "http://g" "?y" = "http://a/b/c/d;p?y" "g?y" = "http://a/b/c/g?y" "#s" = "http://a/b/c/d;p?q#s" "g#s" = "http://a/b/c/g#s" "g?y#s" = "http://a/b/c/g?y#s" ";x" = "http://a/b/c/;x" "g;x" = "http://a/b/c/g;x" "g;x?y#s" = "http://a/b/c/g;x?y#s" "" = "http://a/b/c/d;p?q" "." = "http://a/b/c/" "./" = "http://a/b/c/" ".." = "http://a/b/" "../" = "http://a/b/" "../g" = "http://a/b/g" "../.." = "http://a/" "../../" = "http://a/" "../../g" = "http://a/g"
Это означает, что когда базовый URI http://a/b/c/d;p?q
и вы используете //g
относительная ссылка преобразуется в http://g
,
Это относительные протоколы URL. Они указывают на адрес, сохраняя текущий протокол.
Эта нотация часто используется, чтобы избежать проблемы "смешанного содержимого" (в сообщении IE с жалобой на http
а также https
ресурсы на той же странице HTTPS).
Обновление: Официальная документация в RFC 3986:
Относительная ссылка, которая начинается с двух символов косой черты, называется ссылкой на сетевой путь; такие ссылки используются редко. Относительная ссылка, которая начинается с одного символа косой черты, называется ссылкой на абсолютный путь. Относительная ссылка, которая не начинается с символа косой черты, называется ссылкой на относительный путь.
Это независимые от протокола URL. Если веб-страница обслуживается по https, то в запросе используется https, если http, то http.
Пол Ирриш, кажется, популяризировал их, включив в свой стандартный код.
Имейте в виду, что это не только независимый http или https, но также файл, ftp и т. Д.
Это означает, что если вы откроете файл .htm непосредственно в своем браузере на локальном хосте, браузер будет // преобразован как протокол файла, и ваша страница не будет работать. Это может вызвать проблемы на упакованных веб-сайтах как "нативное" приложение с использованием таких инструментов, как Electron, PhoneGap и т. Д.
Пример:
<script src="//mywebsite.com/resource.js"></script>
в
<script src="file://mywebsite.com/resource.js"></script>