是否允许HTTP POST请求发送回响应正文?

时间:2009-08-04 10:48:19

标签: http

根据HTTP规范:

  

如果已在该资源上创建了资源   原始服务器,响应应该   是201(创建)并包含一个实体   它描述了。的状态   请求并指新的   资源和Location标头   (见第14.30节)。

这是否意味着POST请求应始终在Location头中发送没有响应正文的重定向URI?

2 个答案:

答案 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-ControlExpires标头字段。但是,303(请参阅其他)响应可用于指示用户代理检索可缓存资源。