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

Sur*_*mar 39 http

根据HTTP规范:

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

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

Rob*_*ght 37

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

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

此W3C文档进一步解释,虽然该文本实际上是相当含糊:

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

我读到这就是说"...重定向......或......识别[y] ......新资源",但这并不是一个简单的英语句子.

  • 答案是什么?它是"一句话,没有"或"你可以指定一个响应体并同时使用Location头"? (7认同)
  • 我正在回复正文末尾的问题,而不是标题中的问题. (6认同)

小智 18

基于HTTP 1.1规范的第9.5段,这是这类问题的参考,这是我的理解:

是的,你可以,并且规范清楚你可以做什么以及如何做:

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

如果已在源服务器上创建资源,则响应应该201(创建)并包含描述请求状态的实体并引用新资源和Location头(请参阅第14.30节).

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