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

Ian*_*non 12 http

由于POST/Redirect/GET(PRG)模式中的POST请求303 See Other成功返回redirect()状态代码,因此可以告知客户端他们要享受的特定成功风格(例如,OK,Created ,接受等)以及任何适当的标题(例如,Location对于a 201 Created,可能与重定向的标题冲突)?

例如,是否适合使重定向的GET响应POST响应所期望的正确响应代码和标题?

HTTP 1.1规范说:

该方法[303]主要用于允许输出POST激活的脚本以将用户代理重定向到所选择的资源.

但是没有提供任何有关更常见的状态代码和标头丢失的见解.

编辑 - 一个例子:

客户端发送POST请求,在/orders该请求中创建新资源/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请求创建了资源).

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

kel*_*ogs 1

如果您可以控制 Web 服务器,那么如何区分 Agent 标头呢?填写只有您知道的内容(GUID 或其他伪随机内容),然后将其从自动化客户端呈现给网络服务器。然后让网络服务器相应地响应 201 / 303。