根据HTTP规范:
如果已在该资源上创建了资源 原始服务器,响应应该 是201(创建)并包含一个实体 它描述了。的状态 请求并指新的 资源和Location标头 (见第14.30节)。
这是否意味着POST请求应始终在Location头中发送没有响应正文的重定向URI?
答案 0 :(得分:32)
指定响应主体和同时使用Location标头是完全可以接受的。当使用带有201响应的Location标头时,您不会重定向客户端,您只是告诉它将来可以在哪里找到该资源。
重定向仅适用于3xx响应。
W3C docs for this进一步解释,尽管文本实际上很模糊:
Location response-header字段用于将收件人重定向到Request-URI以外的位置,以完成请求或标识新资源。对于201(已创建)响应,Location是请求创建的新资源的位置。对于3xx响应,位置应该应该指示服务器自动重定向到资源的首选URI。
我读到这就是说“...重定向......或......识别[y] ......新资源”,但这并不是一个简单的英语句子。
答案 1 :(得分:17)
基于paragraph 9.5 of the HTTP 1.1 specification,这是这类问题的参考,这是我的理解:
是的,您可以,并且规范明确了您可以做什么以及如何做:
POST
方法执行的操作可能不会产生可由URI标识的资源。在这种情况下,200
(确定)或204
(无内容)是适当的响应状态,具体取决于响应是否包含描述结果的实体。如果在源服务器上创建了资源,则响应应该是
201
(已创建)并包含一个描述请求状态的实体,并引用新资源和Location头(请参阅第14.30节。对此方法的响应不可缓存,除非响应包含适当的
Cache-Control
或Expires
标头字段。但是,303
(请参阅其他)响应可用于指示用户代理检索可缓存资源。