幂等HTTP方法的非幂等序列(示例)是什么?

幂等HTTP方法的非幂等序列(示例)是什么?,http,Http,幂等HTTP方法的非幂等HTTP序列的示例有哪些?我一直在想一些可能的例子,也试图在互联网上找到一些,但我并不真正理解“非幂等序列”的含义——尽管我确实理解幂等(单)方法是什么 让我们看一看 然而,即使所有的方法都是在中执行的,几个请求的序列也可能是非幂等的 这个序列是幂等的。(如果整个序列的一次执行总是产生一个 结果不会因重新执行该序列的全部或部分而改变。)例如,如果序列的结果取决于随后在同一序列中修改的值,则该序列是非幂等的 这里的“结果”到底是什么意思?我已经读过,在同一个资源上的PUT-

幂等HTTP方法的非幂等HTTP序列的示例有哪些?我一直在想一些可能的例子,也试图在互联网上找到一些,但我并不真正理解“非幂等序列”的含义——尽管我确实理解幂等(单)方法是什么

让我们看一看

然而,即使所有的方法都是在中执行的,几个请求的序列也可能是非幂等的 这个序列是幂等的。(如果整个序列的一次执行总是产生一个 结果不会因重新执行该序列的全部或部分而改变。)例如,如果序列的结果取决于随后在同一序列中修改的值,则该序列是非幂等的

这里的“结果”到底是什么意思?我已经读过,在同一个资源上的PUT->GET序列(TCP/IP指南:一个全面的、有插图的Internet协议参考,1349)是非幂等的,因为第二个请求的结果取决于第一个请求的结果。但让我们分析一下:

PUT("mysite.com", "Hello world");
GET("mysite.com", "Hello world");
此操作后站点的状态将是,它将包含“Hello World”文本。 好的,现在我们在第一次执行序列之后。现在我们做到了:

PUT("mysite.com", "Hello world");
站点的状态不会更改。如果一个方法的结果应该被解释为该方法应用于给定资源后站点的状态,那么结果显然与第一次执行整个序列后的结果相同。然而,也有可能应该理解,应用PUT方法的结果是应用此方法后站点的内容,而GET方法的结果是用户收到的响应。如果是这种情况,那么最后一个操作的结果与初始序列的结果不一样,这仅仅是因为PUT和GET方法做的事情不同。但这种解释会导致进一步的复杂化,我将在后面的文章中说明这一点。现在,让我们继续:

GET("mysite.com", "Hello world");
该操作的结果显然与执行初始序列的结果相同

现在,我将解释我上面给出的解释的复杂性是什么(或将是什么):它基本上意味着实际上任何GET方法序列都不是幂等的(除非每个GET都要求相同的资源)。事实上,GET(“mysite.com”、“img1.jpg”)的结果总是不同于GET(“mysite.com”、“img2.jpg”)。这将有效地使管道化GET请求变得不可能(RFC2616明确指出,“客户端不应该使用非幂等方法或非幂等方法序列来管道化请求”)

然而,幂等方法是在流水线的上下文中使用的,这一事实允许我对它的预期含义进行一些有根据的猜测。也就是说:如果对第n个响应的响应可能取决于之前的一个(或多个)请求的影响,那么我认为它主要是为了防止HTTP服务器并行处理请求而定义的(RFC2616允许并行处理请求,尽管它规定对接收到的请求的响应必须按照这些请求的接收顺序发送)。但如果是这种情况,则原始定义完全错误,应以类似的方式说明:

“假设我们有一个从1到n编号的HTTP方法序列a_n。假设对于{1,2,…,n}中的任何i,方法编号i返回结果R_i。让我们按照以下规则构造一个序列w_p:

1) p是任意取非负自然数,
2) 对于每个pw_p属于{a_1,a_2,…,a_n}

如果每个w_p的条件:

如果w_p=a_j,那么w_p的结果是R_j

如果成立,那么我们说序列a_n是幂等的”

然而,我提出的只是我的假设

你能告诉我它们是对的还是错的吗?

我有同样的问题,我认为问题的关键在于“如果[…]不因重新执行该序列的全部或部分而改变,则序列是幂等的。

因此,定义为:
R:={“放置/测试”、“删除/测试”、“获取/测试”}
如果重新执行请求的子集,则可能会给出不同的结果,尽管对于每个请求
r∈ R
将产生与
N
相同的
R
重新执行相同的副作用