Являются ли URL-адреса, относящиеся к протоколу, относительными URL-адресами?

Так что рассмотрите URL-адрес относительно протокола следующим образом;

//www.example.com/file.jpg

Идея, которая была у меня в голове, сколько я себя помню, состоит в том, что URL-адреса, относящиеся к протоколу, на самом деле являются абсолютными URL-адресами. Они ведут себя точно так же, как абсолютные URL-адреса, и никогда не работают как относительные URL-адреса. Я бы не ожидал, что это заставит браузер найти что-то в

http://www.example.com///www.example.com/file.jpg

URL-адрес определяет хост и путь (как и абсолютный URL-адрес), а схема наследуется от любой используемой страницы, и поэтому она создает полный однозначный URL-адрес, то есть абсолютный URL-адрес.

Правильно?

Теперь, после дальнейшего изучения этого вопроса, я наткнулся на этот ответ, в котором говорится:

URL называется абсолютным URL, если он начинается со схемы и конкретной части схемы (здесь // после http:). Все остальное является относительным URL.

Ни в вопросе, ни в ответе конкретно не обсуждаются URL-адреса, относящиеся к протоколу, поэтому я понимаю, что это может быть просто оплошность в формулировке.

Однако теперь я также сталкиваюсь с проблемой в своей разработке, когда система, которая принимает только абсолютные URL-адреса, не работает с URL-адресами, относящимися к протоколу, и я не знаю, является ли это дизайном или из-за ошибка.

Раздел RFC3986, на который часто ссылаются в отношении URL-адресов, относящихся к протоколу, также всплывает слова "родственник" вокруг много. Затем в 4.3 говорится, что абсолютные URI определяют схему.

Все эти свидетельства против моего первоначального предположения привели меня к вопросу;

Являются ли URL-адреса, относящиеся к протоколу, относительными или абсолютными?


person Emphram Stavanger    schedule 22.03.2013    source источник


Ответы (2)


Каждый относительный URL-адрес является однозначным URL-адресом с учетом URL-адреса, к которому он относится. Итак, если ваша страница http://mypage.com/some/folder/, то вы знаете, что относительный URL-адрес this/that соответствует http://mypage.com/some/folder/this/that, и вы знаете, что относительный URL-адрес //otherpage.com/ разрешается в http://otherpage.com/. Важно отметить, что его нельзя разрешить, не зная URL-адреса страницы, к которой он относится.

Относительный URL — это любой URL, который является относительным к чему-либо и не может быть разрешен сам по себе. Абсолютный URL не требует никакого контекста для разрешения.

person j__m    schedule 22.03.2013

То, что вы называете «URL, относящимся к протоколу», WHATWG называет «URL, относящимся к схеме» в URL Standard, и это не абсолютный URL, а относительный URL.

Конечно, большинство сайтов, доступных на HTTPS, показывают один и тот же контент на соответствующих URL-адресах HTTP, что не обязательно так, и поэтому имеет смысл URL-адрес, который не включает схему, не может считаться абсолютным.

Из документа:

Абсолютный URL должен представлять собой схему, за которой следует символом ":", за которым следует либо URL относительно схемы, если схема является относительная схема или данные схемы в противном случае, за которыми может следовать "?" и запрос.

Конкретно отвечая на ваш вопрос, имеем:

Относительный URL должен быть либо URL относительно схемы, URL относительно абсолютного пути или URL относительно пути, который не начинается с < href="https://url.spec.whatwg.org/#concept-url-scheme" rel="nofollow">схема и ":", за которыми может следовать символ "?" и запрос.

В момент, когда относительный URL является проанализировано, базовый URL должен быть в пределах области видимости.

Примеры (в скобках указаны необязательные)

URL относительно пути [path segment][/[path segment]]…

  • about
  • about/staff.html
  • about/staff.html?
  • about/staff.html?parameters

URL относительно абсолютного пути: /[path-relative URL]

  • /
  • /about
  • /about/staff.html
  • /about/staff.html?
  • /about/staff.html?parameters

URL относительно схемы: //[userinfo@]host[:port][absolute-path-relative URL]

  • //username:[email protected]:8888
  • //[email protected]
  • //example.com
  • //example.com/
  • //example.com/about
  • //example.com/about/staff.html
  • //example.com/about/staff.html?
  • //example.com/about/staff.html?parameters

абсолютный URL: scheme:[scheme-relative URL][?parameters]

  • https://username:[email protected]:8888
  • https://[email protected]
  • https://example.com
  • https://example.com/
  • https://example.com/about
  • https://example.com/about/staff.html
  • https://example.com/about/staff.html?
  • https://example.com/about/staff.html?parameters

относительный URL:

  • Все из списка URL относительно схемы
  • Что-нибудь из списка URL относительно абсолютного пути
  • Все из списка URL относительно пути

Примечание: этот ответ не расходится с первым ответом, но мне было лишь отчасти ясно, что сообщение ответило на вопрос после того, как я прочитал его несколько раз и провел дополнительные исследования. Надеюсь, этот ответ лучше объяснит другим, кто наткнется на это.

person Charlie Gorichanaz    schedule 20.11.2014
comment
URL-адрес, относящийся к абсолютному пути, отсутствует (или больше не является) в спецификации URL-адреса... - person ZachB; 26.09.2018