Существует тонкая концептуальная двусмысленность, когда люди говорят «относительное ури».
По определению RFC3986 , универсальный uri содержит:
URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
hier-part = "//" authority path-abempty
/ path-absolute
/ path-rootless
/ path-empty
foo://example.com:8042/over/there?name=ferret#nose
\_/ \______________/\_________/ \_________/ \__/
| | | | |
scheme authority path query fragment
Хитрость заключается в том, что, когда схема и полномочия опущены, сама часть «пути» может быть либо абсолютным путем (начинается с «/»), либо относительным путем без корня. Примеры:
- абсолютный URI или полный URI:
"http://example.com:8042/over/there?name=ferret"
- И это относительный uri с абсолютным путем : "/ over / there"
- И это относительный uri, с относительным путем : "здесь" или "./here" или "../here" или т. Д.
Таким образом, если вопрос заключался в том, «должен ли сервер выдавать относительный путь в ответе покоя», ответ «Нет», и здесь подробно указана причина .
Я думаю, что большинство людей (включая меня) против «относительного ури» на самом деле против «относительного пути».
И на практике большая часть серверной инфраструктуры MVC может легко генерировать относительный URI с абсолютным путем , например, "/ absolute / path / to / the / controller", и возникает вопрос "является ли сервер реализация должна иметь префикс схемы: // имя_хоста: порт перед абсолютным путем ". Как и вопрос ОП. Я не совсем уверен в этом.
С одной стороны, я все еще думаю, что сервер, возвращающий полный URI, рекомендуется. Однако сервер никогда не должен жестко кодировать имя хоста: порт в исходном коде, как этот (иначе я бы предпочел откат к относительному URI с абсолютным путем). Решение на стороне сервера всегда получать этот префикс из заголовка «Host» HTTP-запроса. Не уверен, что это работает для всех ситуаций.
С другой стороны, клиенту не составит труда объединить "http://example.com:8042"
и абсолютный путь. Ведь клиенту уже известны эта схема и доменное имя, когда он отправляет запрос на сервер, верно?
В целом, я бы сказал, рекомендую использовать абсолютный uri, возможно, отступить от относительного uri с абсолютным путем, никогда не использовать относительный путь .