HTTP方法中的幂等性是什么?

HTTP方法中的幂等性是什么?,http,Http,我读过HTTP文档,但不明白什么是幂等性。有人能帮忙吗?Idenpotent方法(GET,OPTIONS)不会在服务器上更改任何内容(除了可能添加日志条目)。非幂等(PUT、POST、DELETE)方法更改用于填充网页内容的数据,或影响其他地方的更改(例如移动起重机、转移资金、发送电子邮件) 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
    它将给出相同的
    结果

  • PUT如果递归激发精确
    /user/123
    它将给出相同的结果

非幂等性:删除,POST:为什么

  • 删除如果递归激发精确
    /user/123
    
    DELETE /resource/123