一、什么是HTTP无状态?
1.1定义:
HTTP无状态协议,是指协议对于交互性场景没有记忆能力。
1.2举个例子:
在点击一个纯的html网页,请求获取服务器的html文件资源时,每次http请求都会返回同样的信息,因为这个是没有交互的,每一次的请求都是相互独立的。第一个请求和第二个请求也没有先后顺序,返回处理哪个,结果都是同样的资源页面,因为这种场景是无交互的,无论是什么人请求这个地址,服务器都是返回那个相同的响应。
在无交互场景中上面那样,当然也不会有太大的问题。但是对于涉及到动态交互的场景,就显得很尴尬了,何为交互?有来又有往,对于一模一样的两个接口,不同的人在请求第二个接口时可能会基于请求第一个接口的结果而有所不同。
1.3具体场景:
现在我们来想一个复杂的场景,如在购物网站上买一个书包,流程如下:
- 输入账号密码登陆 /login 用户信息
- 选择一款你喜欢的书包加入到购物车中 /cart 用户信息,产品信息
- 购买支付 /pay 用户信息,商品信息,金额信息
所谓的登录只是验证你是否是一个合法用户,若是合法则跳转到信息的页面,不合法则告知用户名密码错误。
但是我们在第一步给服务器发完/login接口后,服务器就忘记了。。。忘记了你这个人,到底有没有经过认证。
所以在添加商品时/cart 你还是需要将你的账号密码和商品信息一起提交给 addCart接口,再让服务器做验证。
第三步同理。
1.4存在的问题:
所以我们说涉及到交互时,情形就完全不一样了,因为这三步是有依赖关系的,第一步验证登录者是一个合法用户,验证通过给你返回200/OK,但是只要服务器给返回了响应,那么一个http的请求和响应就结束了。服务器怎么知道10秒钟之前你刚刚登录过呢?不好意思,服务器不知道你有没有登陆过,他只是对外提供一个登录接口,要想证明你是合法用户必须调/login接口。
第二步,将商品加入到购物车中时,你会调用/cart接口,但是注意,这个行为是和