视频6分50秒左右,post幂等的问题

来源:2-10 HTTP相关_2

莨菽菽

2020-04-03

老师好:

    讲解幂等时候,你的原话是:

post会向数据库提交数据,会改变数据库的数据,而且每次获得的结果都可能不一样,因为post请求是作用于上一层的url上的,每一次请求都会添加一份新的资源,而put方式是幂等的

我在你另外一个回答里面找到你的回复

POST http://www.forum.com/articles的语义是在http://www.forum.com/articles下创建一篇帖子,HTTP响应中应包含帖子的创建状态以及帖子的URI。两次相同的POST请求会在服务器端创建两份资源,它们具有不同的URI,因此post不幂等。post请求作用在上一级url也就是作用在http://www.forum.com/articles中。

但是上面我还是有些不解


我的问题是:

    1.每一次请求都会添加一份新的资源怎么理解?一个post重复提交,提交的数据应该是一样的吧?

    2.两次相同的Post请求为什么会在服务器创建两份资源?因为是不同的socket申请么?

    3.它们具有不同的URI?相同的POST请求uri是一样的吧?

    4.作用于上一级url意思是每次都重新申请了整http://www.forum.com/articles,虽然本身只想提交请求?但是如果是ajax请求提交Post,是不是就不算作用于上一级url了?

    5.PUT和POST的应用场景有什么区别?

问题有点多,麻烦老师解答下,谢谢

写回答

1回答

翔仔

2020-04-05

同学好,

咱们这里讨论的http是指restful风格的接口规范,在restful规范里面,post的语义是指新增一个没有id的资源,既然如此,即使两次提交的数据是一样的,也会在服务端创建两个id,所以这里咱们说restful 风格的post不是幂等的

URI是指统一资源标识符,可以等效表示资源的id,所以两次重复的post 会有不同的uri,因为都新增了资源

这是我们在遵循严格的restful规范的情况下,put指更新一个资源。或新增一个含 id 资源(如果 id 不存在); post指新增一个没有id的资源。 当然,我们在现实中可能大部分代码不会严格遵守restful的规范,所以才会有你说的这种情况,我们用接口支持post重入等


0
1
莨菽菽
非常感谢!
2020-04-05
共1条回复

剑指Java面试-Offer直通车 百度资深面试官授课

招聘季即将到来,让百度资深面试官来为你的高薪Offer保驾护航

8453 学习 · 1872 问题

查看课程