2009-08-04 3 views
28

В соответствии со спецификацией HTTP:Запрос HTTP POST разрешен для отправки обратно тела ответа?

Если ресурс был создан на сервере происхождения, ответ ДОЛЖЕН быть 201 (Создан) и содержать объект , которая описывает состояние запроса и ссылается на новый ресурс и заголовок местоположения (см. раздел 14.30).

Означает ли это, что запрос POST всегда должен отправлять URI переадресации в заголовке местоположения без тела ответа?

ответ

25

Вполне допустимо указать тело ответа и использовать заголовок местоположения одновременно. При использовании заголовка Location с ответом 201 вы не перенаправляете клиента, вы просто говорите ему, где он может найти ресурс в будущем.

Перенаправления применяются только к ответам 3xx.

W3C docs for this объяснить далее, хотя текст на самом деле довольно неоднозначным:

местоположении поле заголовка отклика используется для перенаправления получателя в месте, отличном от Request-URI для завершения запроса или идентификация нового ресурса. Для ответов 201 (Создано) это местоположение нового ресурса, созданного запросом. Для ответов 3xx местоположение ДОЛЖНО указывать предпочтительный URI сервера для автоматического перенаправления на ресурс.

Я прочитал это как «... перенаправить ... или ... identif [y] ... новый ресурс», но это не совсем простое английское предложение.

+6

Каков ответ? это «словом, нет» или «вы можете указать тело ответа и использовать заголовок« Место »одновременно»? –

+6

Я отвечал на вопрос в конце текста тела, а не на вопрос в заголовке. –

+0

Я думал по тем же линиям.Просто хотел сделать вдвойне уверен. Спасибо, Роб. –

12

на основе paragraph 9.5 of the HTTP 1.1 specification, что ссылка на такие вопросы, как, что, вот мое понимание:

Да, можно, и спецификации ясно о том, что вы можете сделать и как это сделать:

Действие, выполняемое методом POST, может не привести к ресурсу, который может быть идентифицирован с помощью URI. В этом случае либо 200 (OK), либо 204 (без содержимого) является соответствующим статусом ответа, в зависимости от того, включает ли ответ объект, который описывает результат.

Если ресурс был создан на исходном сервере, ответ должен быть 201 (создан) и содержать объект, который описывает состояние запроса и ссылается на новый ресурс, и заголовок местоположения (см. Раздел 14.30) ,

Ответы на этот метод не подлежат кешированию, если только ответ не содержит соответствующие поля заголовков Cache-Control или Expires. Тем не менее, ответ(см. Другой) можно использовать для направления агента пользователя для получения кэшируемого ресурса.

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