Начиная с запроса POST в POST/перенаправлении/получать (PRG) шаблон возвращает перенаправление (303 See Other
) код состояния по успеху, это вообще возможный сообщить клиенту определенного аромата успеха, которым они должны наслаждаться (например, хорошо, Созданные, Принятые, и т.д.), а также любые соответствующие заголовки (например. Location
для a 201 Created
, который мог бы конфликтовать с тем из перенаправления)?
Это могло бы быть соответствующим, например, чтобы заставить перенаправленный ДОБРАТЬСЯ отвечают надлежащим кодом ответа и заголовками, которые ожидались бы от ответа POST?
Спецификация HTTP 1.1 говорит:
Этот метод [303] существует, прежде всего, чтобы позволить выводу активированного POST сценария перенаправлять агент пользователя к выбранному ресурсу.
Но не предлагает понимания потери более обычного кода состояния и заголовков.
Редактирование - пример:
Клиент отправляет запрос POST к /orders
который создает новый ресурс в /orders/1
.
Если сервер отправляет a 201 Created
состояние с location: /orders/1
, автоматизированный клиент будет счастлив, потому что это знает, что ресурс был создан, и это знает, где это, но человек, использующий веб-браузер, будет недоволен, потому что они получают страницу /orders
снова, и если они обновляют его, они собираются отправить другой заказ, который вряд ли будет тем, что они хотят.
Если сервер отправляет a 303 See Other
состояние с location: /orders/1
человеческая воля быть взятой к их порядку, сообщила о своем существовании и состоянии и не рискнет повторить его случайно. Автоматизированному клиенту, тем не менее, не скажут явно создания ресурса, оно должно будет вывести создание на основе location
заголовок. Кроме того, если 303
перенаправления где-то в другом месте (например. /users/someusername/orders
) человек может быть хорошо размещен, но автоматизированный клиент оставляют решительно неинформированным.
Мое предложение состояло в том, чтобы отправить 201 Created
как ответ на перенаправленный получают запрос на новом ресурсе, но чем больше я думаю об этом, тем меньше мне нравится он (могло быть хитрым, чтобы гарантировать, что только создатель получает 201
и не должно казаться что GET
запрос создал ресурс).
Каков оптимальный ответ в этой ситуации?