首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >哪些是幂等HTTP方法的非幂等序列的例子?

哪些是幂等HTTP方法的非幂等序列的例子?
EN

Stack Overflow用户
提问于 2016-03-20 23:06:54
回答 1查看 748关注 0票数 3

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

让我们来看看https://www.rfc-editor.org/rfc/rfc2616.pdf

然而,即使在该序列中执行的所有方法都是幂等的,也有可能是由多个请求组成的序列是非幂等的。(一个序列是幂等的,如果整个序列的单个执行总是产生一个不被该序列的所有或部分重新执行而改变的结果。)例如,如果序列的结果依赖于后来在同一序列中修改的值,则序列是非幂等的。

“结果”到底是什么意思?我已经阅读过在同一资源上放置-> GET序列( TCP/IP指南:一个综合的、插图化的因特网协议引用,1349)是非幂等的,因为第二个请求的结果取决于第一个请求的结果。但让我们分析一下:

代码语言:javascript
复制
PUT("mysite.com", "Hello world");
GET("mysite.com", "Hello world");

此操作后的站点状态将是包含"Hello“文本。好,现在我们是在我们的序列的第一次执行之后。现在我们做到了:

代码语言:javascript
复制
PUT("mysite.com", "Hello world");

网站的状态不会改变。如果将该方法应用于给定资源后,应将方法的结果解释为站点的状态,则结果显然与第一次执行整个序列后的结果相同。然而,也有可能应该理解,应用PUT方法的结果是应用该方法之后站点的内容,GET方法的结果是用户收到的响应。如果是这样的话,最后一个操作的结果与初始序列的结果不一样,原因很简单,PUT和GET方法做了不同的事情。但是,正如我稍后在这篇文章中所展示的那样,这种解释会导致进一步的复杂性。现在,让我们继续:

代码语言:javascript
复制
GET("mysite.com", "Hello world");

该操作的结果显然与执行初始序列的结果相同。

现在,我将解释我给出的解释的复杂程度(或者说会是这样):这基本上意味着几乎所有的GET方法序列都不会是幂等的(除非每个GET都请求相同的资源)。实际上,GET("mysite.com","img1.jpg")的结果总是不同于GET("mysite.com","img2.jpg")。它有效地使流水线GET请求不可能实现(RFC2616明确指出“客户端不应该使用非幂等方法或非幂等方法序列来传递请求”)。

然而,幂等方法是在管道上下文中使用的,这一事实允许我对它的意图做一些有根据的猜测。即:我假设定义它主要是为了防止HTTP服务器并行处理请求,如果对第n个响应的响应可能取决于先前请求的一个(或多个)的效果(RFC2616允许并行处理请求,但它指出对接收到的请求的响应必须按照接收这些请求的顺序发送)。但如果是这样的话,那么原来的定义就是错误的,应该以类似的方式来说明:

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

1) p是任意取的非负自然数,

( 2)每个p w_p属于{a_1,a_2,.,a_n}。

如果对于每一个w_p,条件:

如果w_p = a_j,则w_p的结果是R_j

成立,然后我们说序列a_n是幂等的“。

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

你能告诉我他们是对是错吗?

EN

回答 1

Stack Overflow用户

发布于 2018-11-18 19:22:15

我有同样的问题,我认为重点是"A序列是幂等的,如果.不被该序列的 all或部件的重新执行所改变。“。

因此,如果请求的子集被重新执行,R := { "PUT /test", "DELETE /test", "GET /test" }定义的顺序可能会给出不同的结果,尽管对于每个请求,r ∈ R将具有相同的Nr的相同重执行的副作用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36120747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档