Почему заголовок местоположения HTTP устанавливается только для запросов POST/201 (созданных) ответов?

StackOverflow https://stackoverflow.com//questions/24039340

Вопрос

На мгновение игнорируя ответы 3xx, я задаюсь вопросом, почему заголовок местоположения HTTP используется только в сочетании с запросами POST/ответами 201 (Created).

Из Спецификация RFC 2616:

Для ответов 201 (Создано) Местоположение — это местоположение нового ресурса, созданного по запросу.

Это широко поддерживаемое поведение, но почему бы его не использовать с другими методами HTTP?Возьмите Спецификация API JSON В качестве примера:

Он определяет ссылку на саму ссылку для текущего ресурса внутри полезных данных JSON (не редкость для RESTful API).Эта ссылка включена в каждую полезную нагрузку.В спецификации сказано, что вы ДОЛЖЕН включите заголовок местоположения HTTP, если вы создаете новый документ через POST и его значение совпадает со ссылкой на саму ссылку в полезных данных, но это ТОЛЬКО нужен для POST.Зачем беспокоиться о обычай формат ссылки, ссылающейся на себя, если бы вы могли просто использовать заголовок местоположения HTTP?

Примечание:Это не относится только к JSON API.То же самое для ХАЛ, Гиперсхема JSON или другие стандарты.

Заметка 2:Он даже не относится к заголовку местоположения HTTP, поскольку он аналогичен заголовку ссылки HTTP.Как вы можете видеть, JSON API, HAL и JSON Hyper-Schema не только определяют соглашения для самоссылающихся ссылок, но также и для выражения информации о связанных ресурсах или возможных действиях для ресурса.Но кажется, что все они могли бы просто использовать заголовок HTTP-ссылки.(Они могут даже поместить ссылку на себя в заголовок ссылки HTTP, если не хотят использовать заголовок местоположения HTTP.)

Не хочу разглагольствовать, просто похоже, что это своего рода «изобретение велосипеда».Это также кажется очень ограничивающим:если бы вы просто использовали HTTP-заголовок местоположения/ссылки, не имеет значения, запрашиваете ли вы JSON, XML или что-то еще в своем HTTP-заголовке принятия, и вы получите полезную метаинформацию о своем ресурсе в запросе HEAD, что не будет содержат ссылки, если вы будете использовать JSON API, HAL или JSON Hyper-Schema.

Это было полезно?

Решение

Семантика Location заголовок — это не ссылка, ссылающаяся на самого себя, а ссылка, по которой пользовательский агент должен перейти, чтобы выполнить запрос.Это имеет смысл при перенаправлениях, и когда вы создаете новый ресурс, который будет находиться в новом месте, куда вам следует перейти.Если ваш запрос уже выполнен, то есть у вас уже есть полное представление нужного ресурса, нет смысла возвращать Location.

А Link заголовок можно считать семантически эквивалентным гипертекстовой ссылке, но его следует использовать для ссылки на метаданные, относящиеся к данному ресурсу, когда тип носителя не поддерживает гипермедиа, поэтому он не заменяет функциональность ссылки на связанные ресурсы в RESTful API.

Потребность в специальном формате ссылки в представлении ресурса обусловлена ​​необходимостью отделить ресурс от базовой реализации и протокола.REST не связан с HTTP, и можно использовать любой протокол, для которого существует действующая схема URI.Если вы решили использовать Link заголовок для всех ссылок, вы подключаетесь к HTTP.

Допустим, вы предоставляете клиентам FTP-ссылку.Где будет Link в таком случае?

Другие советы

Семантический заголовок местоположения зависит от кода состояния. Для 201 он связывается с недавно созданным ресурсом, но в 3xx запросы он может иметь несколько (хотя и похожие) значения. Я думаю, что это поэтому, как правило, избегать других способов использования.

Альтернатива - это заголовок содержимого-местоположения, который всегда имеет согласованное значение. Он говорит клиенту Canonical URL-адрес, который он запросил. Это чисто информативно (в отличие от местоположения, которое, как ожидается, будет обработано клиентом).

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

Это блоги Post Местоположение VS Content-location Это хорошее сравнение. Вот цитата:

Наконец, ни один заголовок предназначен для связывания общего назначения.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top