幂等方法和安全方法的概念有何不同?

Pan*_*ian 2 rest http idempotent server

试图理解幂等和安全方法的核心概念,但我没有弄清楚。根据我的分析

  • 幂等方法 - 可以使用相同的输入多次调用并产生相同的结果。
  • 安全方法 - 不修改服务器端的资源。

Http 方法分类如下。

  • GET、HEAD、OPTIONS 安全且幂等
  • PUT、DELETE 不安全但幂等
  • POST,PATCH 既不安全也不幂等

帮助我更详细地了解服务器端 HTTP 方法的内部机制以及安全性与幂等性的区别

除了资源修改和产品相同结果之外,是否还有其他特征可用于描述幂等且安全的方法。

Voi*_*son 5

帮助我更详细地了解服务器端 HTTP 方法的内部机制以及安全性与幂等性的区别

安全等都描述了处理请求的语义。

如果请求方法定义的语义本质上是只读的,则该请求方法被认为是“安全的”;即,客户端不请求也不期望由于对目标资源应用安全方法而导致源服务器上的任何状态改变。

意义上来说,安全方法是查询- 它们不会更改任何内容,通常包括读取资源状态,但不修改资源状态。

安全请求处理使资源处于相同状态,因此安全方法也必然是幂等的。

如果使用该方法的多个相同请求对服务器的预期效果与单个此类请求的效果相同,则该请求方法被视为“幂等”。

幂等请求处理意味着,如果客户端发送请求但没有得到答复,则客户端可以重复该请求。

幂等请求处理基本上意味着服务器仅根据请求计算资源的最终状态(不考虑资源的当前状态)。当第二次处理该消息时,将计算并应用相同的新状态。

这大致类似于赋值。

          // the previous value of x was 10, say
set(x, 7) // and now the value of x is 7
set(x, 7) // and now the value of x is still 7
Run Code Online (Sandbox Code Playgroud)

在 HTTP 中,方法PUTDELETE被定义为具有幂等语义。请注意这些方法的共同点:客户端知道资源的最终状态应该是什么,并要求服务器实现它。

如果您对请求的处理类似于

                // the previous value of x was 10, say
increment(x, 7) // and now the value of x is 17
increment(x, 7) // and now the value of x is 24
Run Code Online (Sandbox Code Playgroud)

那么您对请求的处理不是幂等的。

请注意,这里重要的是语义。这是菲尔丁在 2002 年所说的话

HTTP 并不尝试要求 GET 的结果是安全的。它所做的是要求操作的语义是安全的,因此如果发生任何导致财产损失(金钱,顺便说一句,就该定义而言,被视为财产)。