POST/Перенаправление/ПОЛУЧАТЬ (PRG) по сравнению со значимым 2xx коды ответа

Начиная с запроса 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 запрос создал ресурс).

Каков оптимальный ответ в этой ситуации?

12
задан Ian Mackinnon 5 August 2010 в 15:59
поделиться