首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >“副作用”在“幂等HTTP方法在重复多次时可能没有副作用”的上下文中意味着什么?

“副作用”在“幂等HTTP方法在重复多次时可能没有副作用”的上下文中意味着什么?
EN

Software Engineering用户
提问于 2020-06-17 01:13:15
回答 4查看 1.5K关注 0票数 4

HTTP有安全和幂等的HTTP-方法。

HTTP中的幂等函数与数学中的幂等函数不完全相同,定义声明:

方法还可以具有“幂等性”的属性,因为(除了错误或过期问题),N>0相同请求的副作用与单个请求相同。方法GET、HEAD、PUT和DELETE共享此属性。此外,方法选项和跟踪不应该有副作用,因此本质上是幂等的。

(请注意“幂等效应”在引号中。)

有一个很大的潜在混淆,安全和幂等。安全的意思是,一个请求不应该有采取除检索以外的其他行动的意义。

因此,换句话说,它不应该改变后端的任何东西。

但是如果这意味着它是安全的,那么对于幂等HTTP方法来说,“副作用”到底意味着什么?

所有安全的HTTP-方法也是幂等的。

我假设安全和幂等不是完全相同的,可以互换的。但是,与我交谈过的许多人告诉我,幂等效应意味着幂等HTTP请求不应该改变后端的任何内容。但这实际上意味着它是安全的。

EN

回答 4

Software Engineering用户

发布于 2020-06-17 01:23:50

但是,与我交谈过的许多人告诉我,幂等效应意味着幂等HTTP请求不应该改变后端的任何内容。

那些人错了。

绝对允许使用PUTDELETE方法来更改后端状态;幂等效应所需的是,如果我们从初始状态S开始,那么PUT/DELETE请求是1、2、10次还是任何其他次数(明显高于零),最终状态S‘都是相同的。

来源:你引用的RFC2616的一部分。

票数 8
EN

Software Engineering用户

发布于 2020-06-17 05:24:58

安全意味着没有副作用。幂等的意思是任何副作用都必须是相同的,因此如果它们被重复并不重要。

比如说我让我女儿检查烤箱是否预热。这是一个安全的手术,因为它没有副作用。她只是在找。

如果我让她预热烤箱,那是个幂等的操作。如果已经预热了,她就会检查并把它留在相同的状态。我可以要求她10次预热烤箱,她会看着我可怕的记忆,但烤箱总是处于开着状态。

如果我让她打开烤箱的开关,那不是幂等的。烤箱是否预热取决于它是否已经预热。

票数 8
EN

Software Engineering用户

发布于 2020-06-17 03:13:40

HTTP中的幂等函数与数学中的幂等函数不完全相同

不是的。意思完全一样。

在数学中,如果f( f(x) ) =f(X),则函数是幂等函数。

让我们将f(123)定义为"DELETE /user/123“。然后f(f(123))指随后的两个“删除/用户/123”调用。如果第一次调用删除了ID = 123的用户,那么第二次呼叫将找不到要删除的任何内容,系统状态将与第一次调用后相同。均值,f(123)= f(123),这意味着它是幂等的。

重要的假设是HTTP方法的实现遵循RFC。因为从技术上讲,您可以以这样的方式实现服务,即它通过GET更改重要数据。这将是糟糕的建筑风格。然而,我们不应忘记,这可能会发生,我们应该检查特定的应用程序是否真的遵循RFC的建议。

“副作用”到底是什么意思?

在某种程度上,它取决于上下文,取决于定义。

示例1.有一个数据库。方法"GET / user / 123“返回ID为123的用户的数据,并且不更改数据库中的任何内容。这通常被认为是“没有副作用”。这样的调用可能会在代理服务器上产生日志条目,比如在应用程序日志中,等等。但是这通常会被忽略。

示例2.方法"GET / user / 123“返回ID 123的用户数据。但是应用程序在数据库中有一个特定的日志表,每次GET调用都会在这个数据库中创建一个日志条目。许多开发人员会说,在这种情况下,重要的数据不会改变。但有些人可能认为这是一个重大的数据变化。

简单地说:首先与您的团队交谈并定义特定上下文(项目、应用程序)的术语是有意义的,这样团队中的每个人都能以相同的方式理解这些单词。将这些定义编入术语表,并提供给所有相关人员。

有一个很大的潜在混淆,安全和幂等。

这取决于人。有些人可能会感到困惑,而另一些人则不会。

如果一个方法不改变重要的数据,它是安全的。

但是幂等方法可能会改变重要的数据。重要的是后续调用后的系统状态:它们是否产生与第一次请求相同的结果?如果状态相同,则该方法是幂等的。例如,"DELETE /users/ 123“删除ID =123的用户,从而执行数据的重大更改。"DELETE /users/123“的第二次及以后的调用将不再改变任何事情。因此,第二呼叫后的状态与第一呼叫后的状态相同。这就是为什么这样的方法是幂等的。同样适用于PUT或修补程序。可以更改一次数据。但是随后的调用不再改变系统状态,因此是幂等的。

因此,删除、放置、修补程序是不安全的(从RFC的意义上说),因为这些方法可以改变重要的数据。但它们是幂等的。

结果:如果一个方法是安全的,它也是幂等的。如果方法是幂等的,它不一定意味着它是安全的。

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

https://softwareengineering.stackexchange.com/questions/411600

复制
相关文章
linux命令后台运行
1. command & : 后台运行,你关掉终端会停止运行 2. nohup command & : 后台运行,你关掉终端也会继续运行
RainMark
2019/09/10
9.8K0
在linux后台运行脚本的方法和命令
后台运行脚本 执行脚本test.sh:./test.sh 中断脚本test.sh:ctrl+c 在1的基础上将运行中的test.sh,切换到后台并暂停:ctrl+z 执行ctrl+z后,test.sh在后台是暂停状态(stopped),使用命令:bg number让其在后台开始运行(“number”是使用jobs命令查到的 [ ]中的数字,不是pid) 直接在后台运行脚本test.sh:./test.sh & 查看当前shell环境中已启动的任务情况:jobs 将test.sh切换到前台运行:fg %number(”number”为使用jobs命令查看到的 [ ] 中的数字,不是pid) 中断后台运行的test.sh脚本:先fg %number切换到前台,再ctrl+c;或是直接kill %number 以上两种在后台运行test.sh的方法,当遇到退出当前shell终端时,后台运行的test.sh也就结束了。这是因为以上两种方法使得test.sh在后台运行时,运行test.sh进程的父进程是当前shell终端进程,关闭当前shell终端时,父进程退出,会发送hangup信号给所有子进程,子进程收到hangup以后也会退出。所以要想退出当前shell终端时test.sh继续运行,则需要使用nohup忽略hangup信号。
大数据流动
2020/06/19
3.6K0
Linux||后台运行及查看状态命令
在使用Linux运行程序的时候,常常遇到需要耗费一定时间才能完成的文件,如果在前台运行,此时坐在电脑前的你只能被迫打开其他软件进行摸鱼。
小汪Waud
2023/02/16
7.7K0
Linux||后台运行及查看状态命令
如何在后台运行Linux命令
通常情况下,当你在终端运行一个命令,在你开始输入另外一个命令之前,你必须等待当前命令运行结束。这被称为在前台运行命令,或者前台进程。当一个进程在前台运行时,它占用了你的 shell,并且你可以通过输入设备和它进行交互。
雪梦科技
2020/05/11
8.1K0
如何在后台运行Linux命令
如何在后台运行Linux命令?
通常情况下,在 Linux 终端中运行命令时,我们必须等前一命令执行完成后,在输入并执行后一条命令,称之为在前台或前台进程中运行命令,进程在前台运行时,将占用您的外壳,并且您也可以使用输入设备与其终端进行交互。
杰哥的IT之旅
2020/06/18
3.8K0
如何使程序在Linux后台运行
这样一来,test程序就在后台运行了。但是,这样处理还不够,因为这样做虽然程序是在后台运行了,但log依然不停的输出到当前终端。因此,要让终端彻底的清静,还应将log重定向到指定的文件:
阿凡亮
2020/04/14
8.9K0
使程序在Linux下后台运行
我们计算的程序都是周期很长的,通常要几个小时甚至一个星期。我们用的环境是用putty远程连接到日本Linux服务器。所以使程序在后台跑有以下三个好处:
SingYi
2022/07/14
4.3K0
在 Linux or windows 上后台运行服务
  此时可以访问 http://ip:8000 验证服务是否成功启动了(详细操作见另一篇文章-Python 一行搭建文件服务器)
我是胖虎啊
2022/06/27
3.3K0
在 Linux or windows 上后台运行服务
DOS命令后台运行
在你批处理的相同目录下新建一个记事本,里面输入: set ws=wscript.createobject("wscript.shell") ws.run "win.bat /start",0 (其中win.bat为你自己的批处理名字,自己改) 然后把这个记事本保存为后缀名为.vbe的文件,到时候你只要运行这个vbe文件
gemron的空间
2019/11/04
2.2K0
Linux通过screen命令,使得应用后台运行
在Linux中,如果需要一个软件后台长期运行,那我们可以使用nohup bash -c “xxxxxx” & 这个命令。但是,这个命令有些局限性:我们无法继续交互式的和我们的应用进行交互。因此我们可以使用screen命令来实现这个功能。screen命令的功能,有点类似于Windows下的“第二桌面”。
灯珑LoGin
2023/10/18
5210
Linux通过screen命令,使得应用后台运行
Linux后台运行hexo
hexo是一个非常高效的博客,但由于其设计特点,目的是为了转换为静态页面,因此不必要一直在后台运行,但是我想随时随地写博客同步到github,使用hexo admin编辑器,这就需要hexo一直在后台运行,于是在网上找到了pm2托管的方式。
宋天伦
2020/07/15
6.8K0
Linux下使Shell 命令脱离终端在后台运行
你是否遇到过这样的情况:从终端软件登录远程的Linux主机,将一堆很大的文件压缩为一个.tar.gz文件,连续压缩了半个小时还没有完成,这时,突然你断网了,你登录不上远程Linux主机了,那么前面的半个小时就会前功尽弃,你非常气愤……
飞奔去旅行
2019/06/13
2.7K0
linux 后台运行方法总结
多种后台运行方法总结,nohup, disown, setsid, (...&), screen, tmux
PedroQin
2020/06/22
3.8K0
Linux 后台运行 Jar 包
在部署 Java 程序的时候,最简单的方式就打成 jar 并使用 java -jar xxxx.jar 运行,但是如果是一台 Linux 服务器,执行远程上去之后,如果断开链接会中断服务,经过测试,可以通过下面的命令执行:
zucchiniy
2019/10/30
8.4K0
nohup命令–linux后台运行程序并实时查看输出
前言 前台运行程序十分的不稳定,当xshell断掉之后,程序也就断掉了。然后同学向我推荐了nohup命令,于是我就非常愉快的使用起来啦~
kirin
2021/03/15
5.3K0
EasyNVR在官网运行测试时录像播放失败是什么原因?
TSINGSEE青犀视频开发的EasyNVR、EasyDSS、EasyGBS、EasyCVR都包含云端录像功能,同时对录制下来的文件都支持按照指定时间段进行下载,下载的都是MP4标准的视频文件。
EasyNVR
2021/12/09
8940
EasyNVR在官网运行测试时录像播放失败是什么原因?
在window的cmd窗口下运行linux命令
之前看很多视频老师都是用Linux命令操作命令框,感觉很方便,自己在cmd窗口试了一下,所有这些命令都提示不是内部或外部命令,后来发现了windows还有一个powershell命令行工具,用起来似乎比cmd强大一点点,但是依旧linux命令不行,在网上才发现这么一个神器安装包如下: 链接: http://pan.baidu.com/s/1c23XvFU 密码: rz2v 点击默认路径安装,安装好后复制该路径地址: C:\CygwinPortable\App\Cygwin\bin 到系统环境变量里设置一下,
蓓蕾心晴
2018/04/12
4.8K0
关于 Linux后台运行进程
最近在搭建kafka的过程中,发现启动相关服务后,终端界面无法再进行操作。每次都需要开启多个终端界面,实在是特别麻烦。于是就研究了下Linux后台启动程序的方法,并整理了如下的笔记。
用户8710643
2021/06/08
1.9K0
EasyNVR在官网运行测试时录像播放失败是什么原因?
TSINGSEE青犀视频开发的EasyNVR、EasyDSS、EasyGBS、EasyCVR都包含云端录像功能,同时对录制下来的文件都支持按照指定时间段进行下载,下载的都是MP4标准的视频文件。
TSINGSEE青犀视频
2021/12/03
8040
linux 如何后台运行程序?
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
云雀叫了一整天
2019/09/29
4.1K0

相似问题

Mule在linux命令的后台运行。

24

在linux环境中运行命令失败

17

在Linux上,remove命令"rm“是否在后台运行?

23

无法在后台从dockerfile运行linux命令?

28

在后台运行Linux命令,关闭SSH后继续运行

33
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文