如何完成 HTTP 协议的状态管理呢? 有3种常见的解决方案:
1. cookie
1. 客户端发送第一次请求, 服务端接收请求, 处理请求.
2. 服务端在响应数据包中携带 cookie 信息一起返回给客户端.
3. 客户端接收响应, 解析得到 cookie , 保存在客户端本地.
4. 客户端发送后续请求时, 在请求数据包中携带 cookie 信息一起发送, 这样服务端就可以解析到以前存过
的数据, 完成 http 状态管理.
2. token
1. 客户端发送第一个请求, 服务端接收请求, 处理请求.
2. 当服务端需要把一些敏感数据(用户信息等)传给客户端时(需要让客户端下次访问服务的时候带回来), 这
些敏感数据不可以明文传输(容易被篡改). 所以服务端可以使用 JWT(JSON Web Token) 的方式来对这些
数据进行加密(生成 token 字符串), 最后传输给客户端即可.
3. 客户端接收到加密的 token 字符串后, 存起来( localStorage 中)
4. 当下次发送请求时, 从 localStorage 中获取 token 字符串, 将该字符 串传给服务端. 服务端接收
token , 通过相同的秘钥将数据解析出来, 完成 HTTP 状态管理
3. session
由于 cookie 不安全, 所以可以使用session机制将敏感数据在服务端存储.流程如下:
1. 客户端发送第一次请求, 服务端接收请求, 处理请求.
2. 服务端将会为这个客户端分配一个 sid 与一个 session 对象(存储数据用).
服务端将会在返回响应数据时, 将 sid 以 cookie 的形式带给客户端.
3. 客户端接收到响应数据后, 将会自动存储 cookie . sid 就会被存在客户端.下次发送请求时, 浏览器将会
自动把 sid 带着一起发请求.
4. 服务端接收到请求中的 sid 后, 寻找 sid 所对应的 session 对象, 从而获取上次请求存储的数据, 完成
http 的状态管理.