POST / Redirect / GET(PRG)与有意义的2xx响应代码

时间:2010-08-01 20:53:24

标签: http

由于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请求不应显示创建资源。

在这种情况下,最佳反应是什么?

2 个答案:

答案 0 :(得分:3)

将响应正文中的人为目标信息作为HTML发送。不要区分User-Agent标头;如果您还需要将机构发送到机器,请根据Accept请求标头进行区分。

答案 1 :(得分:1)

如果您可以控制Web服务器,那么如何区分Agent标头? 将其填入您只知道的(GUID或其他伪随机事物)并从自动客户端向Web服务器提供该内容。然后相应的网络服务器响应201/303。

相关问题