@archil对滥用动词的陷阱有一个很好的解释,但我要指出的是,规则并不像你所描述的那么严格(至少就协议而言)。
- GET 必须是安全的。这意味着 GET 请求不得以任何实质性方式更改服务器状态。(服务器可以做一些额外的工作,比如记录请求,但不会更新任何数据。)
- PUT 和 DELETE 必须是幂等的。这意味着对同一 URI 的多次调用将与一次调用具有相同的效果。例如,如果您想将一个人的姓名从“Jon”更改为“Jack”,并且使用 PUT 请求进行更改,那没关系,因为您可以这样做一次或 100 次,并且该人的姓名仍然会更新到“杰克”。
- POST 不保证安全性或幂等性。这意味着您可以通过 POST 请求在技术上做任何您想做的事情。但是,您将失去客户可以利用这些假设的任何优势。例如,您可以使用 POST 进行搜索,这在语义上更像是一个 GET 请求。不会有任何问题,但浏览器(或代理或其他代理)永远不会缓存该搜索的结果,因为它不能假设请求没有任何改变。此外,网络爬虫永远不会执行 POST 请求,因为它无法假设操作是安全的。
The entire HTML version of the world wide web gets along pretty well without PUT or DELETE and it's perfectly fine to do deletes or updates with POST, but if you can support PUT and DELETE for updates and deletes (and other idempotent operations) it's just a little better because agents can assume that the operation is idempotent.
See the official W3C documentation for the real nitty gritty on safety and idempotency.