URI, начинающийся с двух слешей ... как они себя ведут? - PullRequest
91 голосов
/ 01 ноября 2010

В последнее время я видел работающих кодовых блоков, как это:

<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 ]

86 голосов
/ 01 ноября 2010

Ресурс, который вы ищете, это 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.

61 голосов
/ 01 ноября 2010

Это относящиеся к протоколу URL-адреса. Они указывают на адрес, сохраняя текущий протокол.

Эта запись часто используется, чтобы избежать проблемы "смешанного содержимого" (предупреждающее сообщение IEжалуется на ресурсы http и https на той же странице HTTPS).

Обновление: официальная документация в RFC 3986:

Относительная ссылка, котораяначинается с двух символов косой черты и называется ссылкой на сетевой путь;такие ссылки используются редко.Относительная ссылка, которая начинается с одного символа косой черты, называется ссылкой абсолютного пути.Относительная ссылка, которая не начинается с символа косой черты, называется ссылкой относительного пути.

30 голосов
/ 01 ноября 2010

Это независимые от протокола URL. Если веб-страница обслуживается по https, то в запросе используется https, если http, то http.

Пол Ирриш, кажется, популяризировал их, включив в свой стандартный код.

1 голос
/ 08 марта 2017

Имейте в виду, что это не только http или https независимо, но также файл , ftp и т. Д.

Это означает, что если вы откроете файл .htm непосредственно в браузере на локальном хосте, браузер разрешит // в качестве протокола файла и ваша страница выиграет 'т работа.Это может вызвать проблемы на упакованных веб-сайтах как «родное» приложение, использующее такие инструменты, как Electron, PhoneGap и т. Д.

Пример:

<script src="//mywebsite.com/resource.js"></script>

до

<script src="file://mywebsite.com/resource.js"></script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...