HTTP方法中的幂等性是什么?
我读过HTTP文档,但不明白什么是幂等性。有人能帮忙吗?Idenpotent方法(GET,OPTIONS)不会在服务器上更改任何内容(除了可能添加日志条目)。非幂等(PUT、POST、DELETE)方法更改用于填充网页内容的数据,或影响其他地方的更改(例如移动起重机、转移资金、发送电子邮件) HTTP方法中的幂等性是什么 幂等性是HTTP方法的一个属性 如果使用请求方法的多个相同请求对服务器的预期效果与对单个此类请求的效果相同,则该请求方法被视为幂等。值得一提的是,幂等性是关于对服务器上的资源状态产生的影响,而不是关于客户端接收到的响应状态代码HTTP方法中的幂等性是什么?,http,Http,我读过HTTP文档,但不明白什么是幂等性。有人能帮忙吗?Idenpotent方法(GET,OPTIONS)不会在服务器上更改任何内容(除了可能添加日志条目)。非幂等(PUT、POST、DELETE)方法更改用于填充网页内容的数据,或影响其他地方的更改(例如移动起重机、转移资金、发送电子邮件) HTTP方法中的幂等性是什么 幂等性是HTTP方法的一个属性 如果使用请求方法的多个相同请求对服务器的预期效果与对单个此类请求的效果相同,则该请求方法被视为幂等。值得一提的是,幂等性是关于对服务器上的资源状
来说明这一点,考虑<代码>删除>代码>方法,该方法定义为幂等。现在考虑客户端执行<代码>删除>代码>请求,以从服务器中删除资源。服务器处理请求,资源被删除,服务器返回
204
。然后,客户端重复相同的DELETE
请求,由于资源已被删除,服务器返回404
尽管客户端收到的状态代码不同,但单个DELETE
请求产生的效果与多个DELETE
请求对同一URI产生的效果相同
最后,如果在客户端能够读取服务器的响应之前发生通信故障,则可以自动重复使用幂等方法的请求。客户机知道重复请求将具有相同的预期效果,即使原始请求成功,但响应可能不同
RFC 7231
让我们看一下,文档定义了HTTP/1.1协议的语义和内容。见下面的引文(亮点是我的)
HTTP方法可以是安全的:
如果请求方法定义的语义本质上是只读的,则它们被认为是“安全的”;i、 例如,客户机不请求也不期望源服务器上的任何状态更改,因为对目标资源应用了安全方法。[……]
安全方法的这种定义并不阻止实现包含潜在有害的行为、不完全只读的行为或调用安全方法时产生副作用的行为。然而,重要的是,客户没有要求额外的行为,因此不能对此负责。[……]
在本规范定义的请求方法中,GET
、HEAD
、OPTIONS
和TRACE
方法被定义为安全的。[……]
和/或幂等元:
如果使用该方法的多个相同请求对服务器的预期效果与单个此类请求的效果相同,则该请求方法被视为“幂等”。在本规范定义的请求方法中,PUT
、DELETE
和安全请求方法是幂等的。[……]
与safe的定义一样,幂等属性仅适用于用户请求的内容;服务器可以单独记录每个请求,保留修订控制历史记录,或者为每个幂等请求实现其他非幂等副作用。[……]
总而言之,HTTP方法分为:
RFC 5789
定义了既不安全也不幂等的方法。但是,为了防止冲突,可以以幂等的方式发出请求,如下所述:
补丁
请求可以以幂等的方式发出,这也有助于防止相同资源上的两个补丁
请求在相似的时间范围内发生冲突而产生不良结果。来自多个补丁
请求的冲突可能比PUT
冲突更危险,因为某些补丁格式需要从已知的基点运行,否则会损坏资源。使用此类修补程序应用程序的客户端应使用条件请求,这样,如果自客户端上次访问资源以来资源已更新,则请求将失败。例如,客户端可以在补丁
请求的If Match
头中使用强ETag
在我的理解中,幂等性与结果(=服务器响应)无关,而是与一个或多个调用后的服务器状态有关 假设您想通过调用删除服务器上的资源
DELETE /resource/123
调用可能会返回HTTP响应200OK
,并首先将删除的资源作为有效负载。在第二次调用中,响应将是204 NO_CONTENT
,因为资源已被第一次调用删除
在每个请求之后,服务器状态都是相同的,因此实现了幂等性。HTTP/1.1没有说明响应
如果请求方法的预期效果是
具有该方法的多个相同请求的服务器是
与单个此类请求的效果相同
TLDR
幂等函数:获取,放置:为什么
- 获取如果递归地精确地
它将给出相同的/resource/123
/user/123
它将给出相同的结果- 删除如果递归激发精确
/user/123
DELETE /resource/123