【问题标题】:Is HTTP POST request allowed to send back a response body?是否允许 HTTP POST 请求发回响应正文?
【发布时间】:2010-11-16 15:25:39
【问题描述】:

根据 HTTP 规范:

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

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

【问题讨论】:

    标签: http


    【解决方案1】:

    指定响应正文同时使用 Location 标头是完全可以接受的。当使用带有 201 响应的 Location 标头时,您并没有重定向客户端,您只是告诉它将来可以在哪里找到资源。

    重定向仅适用于 3xx 响应。

    W3C docs for this 进一步解释,虽然文字实际上很模棱两可:

    Location 响应头字段用于将接收者重定向到 Request-URI 以外的位置,以完成请求或识别新资源。对于 201(已创建)响应,位置是请求创建的新资源的位置。对于 3xx 响应,位置应该指示服务器的首选 URI,以便自动重定向到资源。

    我读到它的意思是“...重定向...或... identif[y]...新资源”,但这并不是一个简单的英文句子。

    【讨论】:

    • 答案是什么?是“一句话,不”还是“你可以指定一个响应体,同时使用Location头”?
    • 我是在回复正文末尾的问题,而不是标题中的问题。
    • 我的想法是一样的。只是想加倍确定。谢谢罗伯。
    【解决方案2】:

    基于paragraph 9.5 of the HTTP 1.1 specification,这是此类问题的参考,以下是我的理解:

    是的,你可以,并且规范清楚地说明了你可以做什么以及如何去做:

    POST 方法执行的操作可能不会产生可由 URI 识别的资源。在这种情况下,200(正常)或204(无内容)是适当的响应状态,具体取决于响应是否包含描述结果的实体。

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

    对此方法的响应不可缓存,除非响应包含适当的Cache-ControlExpires 标头字段。但是,303(请参阅其他)响应可用于指示用户代理检索可缓存资源。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-12
      • 1970-01-01
      • 2020-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-02
      相关资源
      最近更新 更多