由于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
请求创建了资源).
在这种情况下,最佳响应是什么?
如果您可以控制 Web 服务器,那么如何区分 Agent 标头呢?填写只有您知道的内容(GUID 或其他伪随机内容),然后将其从自动化客户端呈现给网络服务器。然后让网络服务器相应地响应 201 / 303。
归档时间: |
|
查看次数: |
756 次 |
最近记录: |