是否允许实体主体使用HTTP DELETE请求?

发出HTTP DELETE请求时,请求URI应完全标识要删除的资源。 但是,是否允许添加额外的元数据作为请求实体的一部分?


规范没有明确禁止或阻止它,所以我倾向于说它是允许的。

微软以同样的方式看待它(我可以听到观众嘀咕),他们在MSDN文章中声明ADO.NET数据服务框架的DELETE方法:

如果DELETE请求包含实体主体,则忽略主体[...]

另外这里是RFC2616(HTTP 1.1)在请求方面的说明:

  • 一个实体主体只存在于一个消息主体时(7.2节)
  • 消息体的存在通过包含Content-LengthTransfer-Encoding标头(4.3节)
  • 当请求方法的规范不允许发送实体主体时,不得包含消息体(见4.3节)
  • 仅在TRACE请求中明确禁止实体主体,所有其他请求类型都是不受限制的(第9节和第9.8节具体说明)
  • 对于答复,这已被定义为:

  • 是否包含消息主体取决于请求方法和响应状态(第4.3节)
  • 在HEAD请求的响应中明确禁止消息体(第9节和第9.4节)
  • 在1xx(信息性),204(无内容)和304(未修改)响应(第4.3节)中明确禁止消息体,
  • 所有其他响应都包含一个消息体,尽管它可能长度为零(4.3节)

  • 对HTTP 1.1规范(RFC 7231)的最新更新显式允许实体主体处于DELETE请求中:

    DELETE请求消息中的有效载荷没有定义的语义; 发送DELETE请求上的有效内容主体可能会导致一些现有的实现拒绝请求。


    如果Tomcat和Jetty的版本存在,它们似乎会忽略实体主体。 如果你打算收到它,这可能是一个麻烦。

    链接地址: http://www.djcxy.com/p/12355.html

    上一篇: Is an entity body allowed for an HTTP DELETE request?

    下一篇: REST request cannot be encoded for GET (URL too long)