协慌网

登录 贡献 社区

是否允许实体正文进行 HTTP DELETE 请求?

发出 HTTP DELETE 请求时,请求 URI 应该完全标识要删除的资源。但是,是否可以在请求的实体中添加额外的元数据?

答案

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

Microsoft 在 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 似乎忽略了实体主体(如果存在)。如果您打算接收它,可能会很麻烦。