GET方法如何是幂等的

时间:2016-09-20 09:18:18

标签: servlets post get

GET方法如何是幂等的而POST不是。我们在表单提交中使用它,如果我们提交两次,它将重新提交表单数据。以及为什么我们没有使用GET来下订单或购买产品,例如当它是幂等的时候。

1 个答案:

答案 0 :(得分:0)

幂等HTTP方法是一种HTTP方法,可以多次调用而不会产生不同的结果。如果只调用一次或十次调用该方法,则无关紧要。结果应该是一样的。同样,这仅适用于结果,而不适用于资源本身。

 a=10;  //This is idempotent: no matter how many times we execute this statement, a will always be 4. 
 a++;  //This is not idempotent. Executing this 10 times will result in a different outcome as when running 5 times.

现在,来询问。
如果我们使用GET方法下订单/购买产品,无论产品是否缺货,都会下订单。相反,如果您使用to POST方法,则每个新购买产品的请求的结果都会有所不同。

以下示例不是幂等的,因为对于每个新请求,结果都会不同

https://accounts.google.com/Login#identifier 

应使用GET方法通过 URL 将信息从浏览器发送到服务器。以下是GET方法的示例用法。

http://www.google.co.in/search?q=cristiano+ronaldo

以下是评论中您的查询的答案:

当用户重新访问由表单提交产生的​​页面时,他们可能会从他们的历史堆栈(他们可能已经打算)中显示该页面,或者他们可能被告知该页面现已过期。用户对后者的典型反应是重新加载。

如果请求是幂等的,这是无害的,表单作者通过指定GET方法向浏览器发出信号。

浏览器通常会(确实“应该”)警告用户,如果他们即将重新提交POST请求,相信这会导致进一步“永久改变宇宙状态”,例如订购另一辆梅赛德斯 - 奔驰的信用卡或其他任何东西。如果用户在尝试重新加载无害的幂等请求时已经习惯了这种情况,那么当他们偶然[OK]请求时,迟早会咬他们。

现在,在实现这两个方法GET和POST时,开发人员应该考虑安全问题并在特定方法中编写代码。考虑到GET方法的所有限制(网址大小等),任何代码都可以用这两种方法编写,但这不是一个好习惯。

GET - >用于信息检索。(如果你想在不改变状态的情况下读取数据) POST - >用于信息创建/更新/删除。