URL без http | https

89

Я только что узнал от коллеги, что отсутствие части «http | https» в URL-адресе в ссылке заставит этот URL-адрес использовать любую схему, которую использует страница.

Так, например, если моя страница доступна по адресу http://www.example.com и у меня есть ссылка (обратите внимание на «//» спереди):

<a href="https://www.google.com">Google</a>

Эта ссылка ведет на http://www.google.com .

Но если я перейду на страницу https://www.example.com по той же ссылке, она перейдет на https://www.google.com.

Я хотел поискать в Интернете дополнительную информацию об этом, но мне сложно придумать хорошую поисковую фразу. Если я ищу «URL-адреса без HTTP», возвращаемые страницы относятся к URL-адресам с такой формой: «www.example.com», а это не то, что я ищу.

Вы бы назвали это URL без схемы? URL-адрес без протокола?

Это работает во всех браузерах? Я тестировал его в FF и IE 8, и он работал в обоих. Является ли это частью стандарта, или мне следует протестировать другие браузеры?

Topher-J
источник
1
Для справки (поскольку вы спросили, какие термины искать), поиск Google, который привел меня к исходному вопросу StackOverflow, был: «абсолютный URL-адрес без протокола»
Дэвид
вы не указываете, http или https, поэтому браузер решает за вас, беря последнюю страницу, предполагая, что ссылка пришла с той же страницы.
raym0nd 06
Спасибо, Дэвид, ссылка на дубликат ответила на все мои вопросы
topher-j
1
@David: Если быть точным, вы бы не назвали его абсолютным URL, если бы он не имел протокола; это скорее относительный URL.
Gumbo

Ответы:

73

Относительный URL протокола

В некоторых браузерах вы можете получать необычные предупреждения системы безопасности.

См. Также краткое определение URL-адресов, относящихся к протоколу Википедии .

Когда-то это было рекомендовано ; но в дальнейшем этого следует избегать .

См. Также вопрос о переполнении стека. Зачем вообще использовать URL-адреса, относящиеся к протоколу? .

Марк Маруска
источник
15

Это называется ссылкой на сетевой путь (отсутствующая часть называется schemeили protocol), определенная в RFC3986, раздел 4.2.

4.2 Относительная ссылка

Относительная ссылка использует преимущества иерархического синтаксиса (раздел 1.2.3) для выражения ссылки URI относительно пространства имен другого иерархического URI.

  relative-ref  = relative-part [ "?" query ] [ "#" fragment ]

  relative-part = "//" authority path-abempty
                / path-absolute
                / path-noscheme
                / path-empty

URI, на который ссылается относительная ссылка, также известный как целевой URI, получается путем применения алгоритма разрешения ссылок из раздела 5.

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

Сегмент пути, содержащий символ двоеточия (например, "this: that"), не может использоваться в качестве первого сегмента ссылки относительного пути, так как он будет ошибочно принят за имя схемы. Такому сегменту должна предшествовать точка-сегмент (например, "./this:that"), чтобы сделать ссылку на относительный путь.

Матас Вайткявичюс
источник
// нельзя использовать в базовом теге в html. Я установил <base href = "// abc.com/" и относительный URL-адрес изображения <img src = "/ img / logo.jpg>. Однако при открытии в браузере ссылка на изображение станет file: /// abc. com / img / logo.jpg. Есть ли обходной путь?
Скотт Чу,