由于POST / Redirect / GET(PRG)模式中的POST请求成功返回重定向(303 See Other
)状态代码,是否可以通知客户特定的成功风格享受(例如OK,Created,Accepted等)以及任何适当的标题(例如Location
201 Created
,这可能与重定向的标题冲突)?
例如,可能适当的做法是使重定向的GET以适当的响应代码响应。 POST响应可能会出现哪些标题?
HTTP 1.1规范说:
此方法[303]主要用于允许输出POST激活的脚本以将用户代理重定向到选定的资源。
但是没有提供对更常见的状态代码和标题丢失的任何见解。
编辑 - 示例:
客户端向/orders
发送POST请求,该请求会在/orders/1
创建新资源。
如果服务器发送201 Created
状态为location: /orders/1
,则自动客户端会很高兴,因为它知道资源已创建,并且知道它在哪里,但使用Web浏览器的人将会不高兴,因为他们再次获得页面/orders
,如果他们刷新它们,他们将发送另一个订单,这不太可能是他们想要的。
如果服务器发送303 See Other
状态为location: /orders/1
,则人员将被接到他们的订单,通知其存在和状态,并且不会有意外重复的危险。但是,自动客户端不会明确告知资源的创建,它必须根据location
标头推断创建。此外,如果303
重定向到其他地方(例如/users/someusername/orders
),那么人类可能会得到很好的适应,但自动客户端会被彻底了解。
我的建议是发送201 Created
作为对新资源上重定向的get请求的响应,但我想的越多,我就越不喜欢它(可能很难确保只有创建者收到201
GET
请求不应显示创建资源。
在这种情况下,最佳反应是什么?
答案 0 :(得分:3)
将响应正文中的人为目标信息作为HTML发送。不要区分User-Agent标头;如果您还需要将机构发送到机器,请根据Accept请求标头进行区分。
答案 1 :(得分:1)
如果您可以控制Web服务器,那么如何区分Agent标头? 将其填入您只知道的(GUID或其他伪随机事物)并从自动客户端向Web服务器提供该内容。然后相应的网络服务器响应201/303。