前言
做了很多项目,好像对 axios每次请求时 要携带 时间戳和token的原因,还是不明确。所以,记录下来,便于时时查看。
时间戳
原因: 因为浏览器具有基于url建立的缓存机制
当浏览器向相同的链接发送请求时,浏览器的缓存机制就会获取之前访问的相同URL时保留下来的缓存资源。 所以为了确保每次请求都是一个不同于之前的请求。
在请求时,加上时间戳,能避免浏览器对URL的缓存。
token
背景
在客户端频繁向服务端请求数据,服务器频繁的去数据库查询用户名和密码并进行比对,判断用户名和密码正确与否,并做出相应的提示,在这样的背景下,token便应运而生。
(另一种说法: 用户登录成功后, 需要反复到服务器获取敏感数据,服务器对每次请求都要验证是哪位用户发送的, 且用户是否合法, 需要反复查询数据库, 对数据库造成过大压力)
实质
token是在服务端产生的一串字符串,以作客户端进行请求的一个令牌。 如果前端使用用户名/密码向服务端请求认证,服务端认证成功,就会返回一个token给前端,前端可以在每次请求的时候带上token 证明自己的合法地位。 如果这个token 在服务端持久化(比如存入数据库),那它就是个永久的身份令牌(除非设置了有效期)
(另一种说法: Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码)
优势
1 支持跨域访问: cookie是不允许跨域访问的, token支持
2 无状态: token不需要服务器保存任何相关信息. token自身就携带所有值
3 去耦: 不需要绑定特定的身份验证方案
4 更适合移动应用: cookie不支持手机端访问
5 基于标准化:JWT
缺陷
1 占带宽: 比session_id 大, 消耗更多的流量
2 无法在服务端注销: 很难解决劫持问题
3 性能问题: JWT标准消耗更多的 CPU 资源
借鉴:
https://blog.csdn.net/JiangLu7/article/details/131139285
https://blog.51cto.com/u_16099249/9095244
https://blog.csdn.net/Joye_7y/article/details/128268044