URL, содержащий схему, но не авторитет (имя хоста)? - PullRequest
4 голосов
/ 06 апреля 2011

Является ли законным (и хорошей практикой, и хорошо поддерживается) исключение компонента "полномочия" из URL (обычно это имя хоста), но указание схемы (обычно http: или https:)?

Например, это действительные URL-адреса?

  https:login.html   (relative hostname and path)
  https:/auth/login.html   (relative hostname, absolute path)

Конечно, ожидаемое поведение - использовать текущее имя хоста - путь (относительный).

(Кстати, это предполагает, что // после схемы является частью компонента полномочий (хоста), я думаю, что это правильная интерпретация)

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

Ответы [ 3 ]

4 голосов
/ 06 апреля 2011

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

Но протокол HTTP ( RFC2616 ) в 3.2.2 делает двойные слэши частью схемы, так что это обязательно. Без них действительный URL-адрес HTTP.

Из RFC2616 3.2.1:

URI в HTTP могут быть представлены в абсолютной форме или относительно [...] двух формы различаются тем, что абсолютные URI всегда начинаются с именем схемы, за которым следует двоеточие.

... так что если вы укажете схему, то она уже считается абсолютным URI.

0 голосов
/ 28 августа 2018

Согласно RFC 3986 :

  • Схема может содержать только буквы, цифры и +.-
  • // является частью Органа

Итак:

  • scheme: //authority /path

Это значит

https://stackoverflow.com/auth/login.html
\____/\_________________/\______________/
   |          |                 |
scheme    authority            path

Полномочия не являются обязательными, что означает, что также допустимо следующее:

https:/auth/login.html
\____/\______________/
   |         |
scheme      path

RFC отмечает другое правило:

  • если вы опустите Authority , Path не сможет начать два слеша //
  • если вы опустите Authority , Path не обязательно начинать с /

Подводя итог:

https://stackoverflow.com/auth/login.html  (valid)
https:///auth/login.html                   (invalid; path cannot begin with // when no authority present)
https://auth/login.html                    (invalid; path cannot begin with // when no authority present)
https:/auth/login.html                     (valid)
https:auth/login.html                      (valid)
https:/login.html                          (valid)
https:login.html                           (valid)
https:/                                    (valid)
https:                                     (valid)

Чтобы ответить на ваш вопрос

  • https:login.html: Да
  • https:/auth/login.html Да
0 голосов
/ 06 апреля 2011

После прочтения некоторых источников я думаю, что релевантной ссылкой является RFC1808

. Там прямо указано, что если указано имя схемы, то URL-адрес считается абсолютным.

Он также комментирует (5.2), что RFC1630 допускает некоторый относительный URL с именем схемы, но:

  • имя схемы должно совпадать с именем схемытекущая (базовая), и будет игнорироваться
  • , что поведение было реализовано только в старых браузерах
  • оно устарело

В заключение, приведенные выше URL недействительны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...