虽然 HTTP 1.1规范在 删除请求上似乎是 允许消息体,但它似乎表明服务器应该忽略它,因为它没有定义的语义。
4.3讯息正文
服务器应该在任何请求时读取和转发消息正文; 如果 请求方法不包括实体主体的定义语义, 那么在处理请求时应该忽略消息正文。
我已经回顾了关于 SO 及其他相关主题的几个相关讨论,例如:
大多数讨论似乎一致认为,在 DELETE 上提供消息正文可能是 允许,但通常不推荐使用 允许。
此外,我注意到在各种 HTTP 客户端库中出现了一种趋势,似乎有越来越多的增强被记录在这些库中,以支持 DELETE 上的请求主体。大多数图书馆似乎都乐于助人,尽管偶尔也会有一些最初的抵触情绪。
我的用例需要在 DELETE 上添加一些必需的元数据(例如,删除的“原因”,以及删除所需的其他元数据)。我考虑了以下选项,没有一个看起来是完全合适的,并且符合 HTTP 规范和/或 REST 最佳实践:
POST /resourceToDelete { deletemetadata }
) POST is not a semantic option for deleting; POST actually represents the 相反 action desired (i.e. POST creates resource subordinates; but I need to delete the resource)My first preference would probably be to use the message body, second to custom HTTP headers; however, as indicated, there are some downsides to these approaches.
对于在 DELETE 请求中包含这些必需的元数据,是否有符合 REST/HTTP 标准的建议或最佳实践?还有其他我没考虑过的选择吗?