2015-07-15 2 views
2

Я знаю, что только абсолютные URL-адреса, доступные только по пути (/path/to/resource), действительны и относятся к той же схеме, хосту, порту и т. Д. В качестве текущего ресурса. Является ли URL-адресом все еще действительным, если добавлена ​​одна и та же (или другая!) ​​Схема? (http:/path/to/resource или https:/path/to/resource)Является ли URL с только схемой + допустимым?

Если является действует в соответствии с буквой спецификации, насколько хорошо браузеры справиться с этим? Насколько хорошо разработчики, которые могут столкнуться с этим кодом в будущем, справятся с этим?

Добавление:

Вот простой тест настроить на сервере Apache:

resource/number/one/index.html:

<a href="http:/resource/number/two/">link</a> 

resource/number/two/index.html:

two 

тестирования в Chrome 43 на O S X: URL-адрес, отображаемый при наведении курсора на ссылку, выглядит правильно. Щелчок по ссылке работает так, как ожидалось. Глядя на DOM в веб-инспекторе, зависание над URL-адресом a href отображает неправильное местоположение (/resource/number/one/http:/resource/number/two/).

Возможно, Firefox 38 также корректно обрабатывает щелчок. Weird.

+0

@minitech Хром 43, казалось, справился с этим, хотя это было скорее случайным открытием, чем исчерпывающим тестом. – smitelli

+0

Я использую Chromium 43 прямо сейчас, и это определенно не работает. 'http:/path/to/resource' переходит в' http: // path/to/resource'. – Ryan

+0

@minitech Weird! Мои тесты показали полную противоположность. См. Добавление по моему вопросу. – smitelli

ответ

3

Нет, это недействительно. От RFC 3986:

4.2. Relative Reference 

    A relative reference takes advantage of the hierarchical syntax 
    (Section 1.2.3) to express a URI reference relative to the name space 
    of another hierarchical URI. 

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

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

    The URI referred to by a relative reference, also known as the target 
    URI, is obtained by applying the reference resolution algorithm of 
    Section 5. 

    A relative reference that begins with two slash characters is termed 
    a network-path reference; such references are rarely used. A 
    relative reference that begins with a single slash character is 
    termed an absolute-path reference. A relative reference that does 
    not begin with a slash character is termed a relative-path reference. 

    A path segment that contains a colon character (e.g., "this:that") 
    cannot be used as the first segment of a relative-path reference, as 
    it would be mistaken for a scheme name. Such a segment must be 
    preceded by a dot-segment (e.g., "./this:that") to make a relative- 
    path reference. 

где path-noscheme именно путь, который не начинается с / которого первый сегмент не содержит двоеточие, который адресует свой вопрос довольно конкретно.

+0

Согласно спецификации, это структурно допустимые URI, но будут делать недопустимые ссылки, потому что относительный авторитет (имя домена в этом случае) будет считаться пустым (5.2.2). Браузеры разрешают их по-разному из-за исторических причин (5.4.2), но некоторая согласованность будет приятной. – shudder

 Смежные вопросы

  • Нет связанных вопросов^_^