幂等

如果对服务器进行单个请求所产生的预期效果与进行多个相同请求所产生的效果相同,则 HTTP 方法称为**幂等**的。

这并不一定意味着请求没有任何唯一的副作用:例如,服务器可能会记录每个请求及其接收时间。幂等性仅适用于客户端预期的效果:例如,POST 请求意在将数据发送到服务器,或 DELETE 请求意在删除服务器上的资源。

所有安全方法都是幂等的,以及PUTDELETEPOST方法不是幂等的。

要成为幂等的,只考虑服务器的状态。每次请求返回的响应可能不同:例如,DELETE的第一次调用可能会返回200,而后续的调用可能会返回404DELETE是幂等的另一个含义是,开发人员不应使用DELETE方法实现具有删除最后一个条目功能的 RESTful API。

请注意,服务器不保证方法的幂等性,某些应用程序可能会错误地破坏幂等性约束。

GET /pageX HTTP/1.1是幂等的,因为它是一种安全(只读)方法。如果服务器上的数据在此期间更新,则后续调用可能会向客户端返回不同的数据。

POST /add_row HTTP/1.1不是幂等的;如果多次调用它,它会添加多行

http
POST /add_row HTTP/1.1
POST /add_row HTTP/1.1   -> Adds a 2nd row
POST /add_row HTTP/1.1   -> Adds a 3rd row

DELETE /idX/delete HTTP/1.1是幂等的,即使返回的状态代码在请求之间可能发生变化

http
DELETE /idX/delete HTTP/1.1   -> Returns 200 if idX exists
DELETE /idX/delete HTTP/1.1   -> Returns 404 as it just got deleted
DELETE /idX/delete HTTP/1.1   -> Returns 404

另请参阅