因为POST/Redirect/GET(PRG)模式中的POST请求返回一个重定向(
303 See Other
)关于成功的状态码,是否有可能告知客户他们将享受的成功的特定味道(如OK、Created、Accepted等)以及任何适当的标题(如。
Location
为了一个
201 Created
,哪个可能与重定向的冲突?
例如,使用POST响应所期望的正确响应代码和头使重定向的GET响应合适吗?
这个
HTTP 1.1
规格说明:
该方法(303)主要用于允许后激活脚本的输出将用户代理重定向到所选资源。
但是没有提供任何关于丢失更常见的状态代码和头的信息。
编辑-示例:
客户端将POST请求发送到
/orders
它在
/orders/1
.
如果服务器发送
创建201
状态
location: /orders/1
,一个自动化的客户端会很高兴,因为它知道资源是创建的,并且知道它在哪里,但是使用web浏览器的人会不高兴,因为他们得到了页面
/命令
再说一次,如果他们刷新了,他们会发送另一个订单,这不太可能是他们想要的。
如果服务器发送
303见其他
状态
位置:/订单/1
人类将被带到他们的命令,告知它的存在和状态,并不会有意外地重复它的危险。不过,自动客户端不会被明确告知资源的创建,它必须根据
location
头球。此外,如果
303
重定向到其他地方(如。
/users/someusername/orders
)人类可能很容易适应,但自动化的客户机却完全不知情。
我的建议是
创建201
作为对新资源上重定向的get请求的响应,但是我越想越不喜欢它(可能很难确保只有创建者收到
201
而且看起来
GET
请求创建了资源)。
在这种情况下,最佳的反应是什么?