举个例子

你登陆了腾讯视频,可以在观看历史里面接着上次的记录接着看,这就是有状态。

当你没有登陆就只能重新从第一集看。这就是无状态。可以不停的请求服务器,服务器不会记录是谁来访问的,这就是http的无状态。

可以使用session cookie token一些技术,变成有状态的。

  • 一.Cookie

    • cookie客户端和服务端都可以创建,存放在客户端。一些不敏感的数据,类型只能是字符串(JSON)
    • cookie性价比很高,存储不消耗服务器资源。存在客户端。比如京东一般把广告页存到了cookie中,当把浏览器中的cookie禁止掉,就广告页中的内容就无法显示
  • 二.Session

    • session解决了共享信息,但影响了服务器的性能。可以去选中扩展服务器做集群,但会出现分布式session问题。可以采用redis或者session粘滞解决
    • 服务端生成session,存在服务端,存放任意数据,seesion必须依赖cookie实现
    • 接下来看一张session的原理图
      对Cokkie Session Token三者的理解

1.当客户端输入正确登陆信息之后,会把用户用户名的id和密码传到服务端的session容器。

2.服务端会有一个专门的容器,同时会生成一个sessionId的东西。会向客户端发送一个sessionId,说明登陆成功。客户端用cookie接收传过来的Session ID。

3.下次登陆的时候,cookie自动携带,传到服务端,判断sessionID是否和容器中的匹配。

三.Token

  • token最核心的是校验,可以存在cookie中,也可以存在请求头中。就是不存在服务端。一切校验操作在后台完成.
  • token和session的区别在于
    • token: 服务器生成,验证,一般以请求头的方式传给客户端,又以同样的方式发给服务端。无状态。
    • session:服务器生成,存储验证,以cookie的方式发给服务端,有状态

对Cokkie Session Token三者的理解
以上的就是token的执行流程,可以发现他的校验操作都是由后台完成的,前端只负责存储和发送token。

而他的校验过程是比较复杂的
对Cokkie Session Token三者的理解
Header是基本头的信息,体可以是用户id,手机号码等等。然后把头和体进行一个算法,得到一个签名。
然后每次请求这个接口的时候,也将头和体取出来,进行一样的算法,得到一个新的签名。如果两个签名相等就没有被篡改,就说明token是有效的。服务器生成token的时候会把签名带上,在鉴权的时候,只需要校验结果就行了。

以上就是今天的最大收获,最早期的时候,追求效率,所以http是无状态的,他的响应速度很快。后来随着发展,慢慢地出现了cookie,然后是session,而又随着一些应用使用人群越来越多,服务器压力贼大,就出现了token,token是存于客户端的,达到了session的效果。又减轻了服务器的压力。

相关文章: