文章目录
络请求中,token 和 cookie 有什么区别!
cookie:
- HTTP 无状态,每次请求都要带cookie,以帮助识别身份
- 服务端也可以向客户端 set-cookie,cookie 大小限制 4kb
- 默认有跨域限制:不可跨域共享、传递 cookie
cookie本地存储:
- HTML5 之前 cookie 常被用于本地存储
- HTML5 之后推荐使用 localStorage和 sessionStorage
cookie 和session
- cookie 用于登录验证,存储用户标识(如 userld)
- session 在服务端,存储用户详细信息,和 cookie 信息–对应(session在服务端,存取各种用户信息,集中存储用户信息)
- cookie + session 是常见登录验证解决方案
token 和 cookie - cookie 是 HTTP 规范,而 token 是自定义传递
- cookie 会默认被浏览器存储,而 token 需自己存储
- token 默认没有跨域限制
重点:
- cookie 是 HTTP 标准,有跨域限制,跨域不共享,跨域不传递,配合session来实现用户的登录校验
- token无标准,无跨域限制,需要自行存储,自行传递,自行获取.
session缺点
- 占用服务端内存,硬件成本高
- 多进程,多服务器时,不好同步-- 需使用第三方缓存,如 redis
- 默认有跨域限制
JWT 优点
- 不占用服务端内存
- 多进程、多服务器 不受影响
- 没有跨域限制
JWT 缺点
- 用户信息存储在客户端,无法快速封禁某用户
- 万一服务端秘钥被泄漏,则用户信息全部丢失
- token 体积一般大于 cookie,会增加请求的数据量
使用场景
- 如有严格管理用户信息的需求(保密、快速封禁)推荐 Session
- 如没有特殊要求,则使用JWT(如创业初期的网站 )
如何实现SSO单点登录
SSO单点登录: 允许用户在一次登录后访问多个应用程序或服务,而无需为每个应用程序都进行单独的认证。
- cookie 默认不可跨域共享,但有些情况下可设置为共享-主域名相同的情况
简单来说流程就是系统A,系统B通过第三方SSO来进行用户的登录验证
用户信息的账号密码在SSO中,校验通过后会发送token到客户端
客户端访问系统A和系统B时,携带token就可以通过SSO的校验访问对应系统
keep-alive的作用
< keep-alive>是Vue提供的一个内置组件,它的作用是用于缓存组件实例,以避免重复渲染DOM。
< keep-alive> 主要作用:
- 缓存组件实例: 当组件被包裹在 < keep-alive> 标签内时,该组件的实例会被缓存起来,而不是每次切换路由时重新创建。
- 避免重复渲染: 由于组件实例被缓存了,在再次激活时就不需要重新渲染,可以获得更好的性能。
- 保存组件状态: 缓存的组件实例的状态会被保留,比如输入框的内容等,不会因为销毁而丢失状态。
- 节省资源: 由于被缓存的组件实例不会被销毁,所以在切换到该组件时不需要重新渲染和重新加载组件,可以节省一定的系统资源和网络请求。
- 多组件缓存: 可以同时缓存多个不活动的组件实例。
- 组件生命周期控制: 包裹的组件会多出两个生命周期钩子activated和deactivated,在组件激活和失活时触发
< keep-alive> 组件通常在以下场景中使用:
- 在需要缓存和复用组件实例的动态路由中,以提高性能。
- 在使用动态组件时,需要缓存切换过的组件实例。
- 在列表或标签页等场景中,需要保留用户操作状态的组件。
JWT
JWT全称是JSON Web Token,是基于 JSON 的开放标准,用于在各方安全地传递信息的方式。它被广泛应用于身份验证和授权领域。
JWT的应用场景如下:
- 身份验证(Authentication):在用户登录后,服务器会生成一个JWT,并将其返回给客户端。客户端以后的每次请求都会携带这个JWT,服务器就可以验证该JWT从而识别用户身份。
- 信息交换(Information Exchange):JWT可以在各方安全地传递一些声明(claims),这些声明被编码到JWT的Payload部分。比如可以携带用户角色、操作权限等信息。
- 单点登录(Single Sign On): JWT能跨多个服务共享身份验证信息,支持单点登录的实现。
一个JWT通常由三部分组成:
- Header(头部):指明JWT的元数据,包括类型和使用的哈希算法。
- Payload(载荷): 存放实际需要传递的信息,比如用户ID、到期时间等。
- Signature(签名): 使用Header和Payload经过编码后的字符串,再加上一个秘钥(secret)通过哈希算法生成的签名。
这三部分使用"."连接,形成一个紧凑的字符串,类似:
aaaaa.bbbbb.ccccc
其中aaaaa是经过Base64编码的Header,bbbbb是经过Base64编码的Payload,ccccc就是签名。
HTTP协议和UDP协议有什么区别
- HTTP 是应用层,TCP UDP 是传输层
- TCP 有连接,有断开,稳定传输
- UDP 无连接,无断开,不稳定传输,但效率高
网络协议
- HTTP 协议在应用层
- TCP UDP 协议再传输层
- 严格来说,应该拿 TCP 和 UDP 进行比较
TCP协议
- 有连接(三次握手)
- 有断开(四次挥手)
- 稳定传输
UDP 协议
- 无连接,无断开
- 不稳定传输,但效率高
- 如视频会议、语音通话
什么是 HTTPS 中间人攻击?如何预防 ?
HTTPS 加密传输
- HTTP 明文传输
- HTTPS 加密传输 HTTP +TLS/SSL
https加密过程
- 客户端发起连接:客户端发起HTTPS连接请求
- 服务器提供证书:服务器响应客户端的请求时,会附带其数字证书。证书包含服务器的公钥、服务器的身份信息、以及CA的签名等
- 客户端验证证书:客户端收到证书后,会验证证书的有效性,包括是否过期、公钥是否对应正确的服务器。
- 密钥协商:客户端生成一个随机的会话密钥,用于对称加密数据传输。客户端使用服务器证书中的公钥加密此会话密钥,然后将其发送给服务器。
- 密钥解密及数据加密:服务器接收到加密的会话密钥后,使用与公钥配对的私钥解密得到会话密钥。
- 建立安全连接:使用这个会话密钥进行对称加密通信
- 数据传输:客户端和服务器之间发送和接收的所有数据都经过会话密钥的加密和解密。
HTTPS加密的核心在于:
- 利用非对称加密解决密钥分发问题
- 利用对称加密提高数据传输效率
- 通过数字证书实现身份认证
< script> defer 和 async 有什么区别 ?
两者都是用来优化网页加载脚本的方式,都能使得脚本异步加载,从而避免阻塞HTML解析
- 当设置 defer 属性时:浏览器会立即下载该脚本文件,但会延迟到DOM构建完成后,DOMContentLoaded事件触发之前按顺序执行。
- 设置 async 属性时:浏览器也会异步下载脚本文件,但它并不保证执行顺序。它们会在可用时尽快执行.
- 如果不阻塞页面渲染的同时,还能确保在DOM加载完后按顺序执行,那么使用 defer 是理想的选择
- 如果脚本可以独立执行,不需要依赖其他脚本或DOM就绪,并且你希望尽早完成脚本执行,那么 async更合适。