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>
Другие вопросы по тегам