字节编码发展
ASCII 码
八个二进制位就可以组合出 256 种状态,这被称为一个字节(byte)。一个字节一共可以用来表示 256 种不同的状态。英语用 128 个符号编码就够了,但是用来表示其他语言,128 个符号是不够的。尤其是不同的语言有不同的符号,剩余的显然是不够用的。比如,130 在法语编码中代表了é,在希伯来语编码中却代表了字母 Gimel (ג),在俄语编码中又会代表另一个符号。但是不管怎样,所有这些编码方式中,0--127 表示的符号是一样的,不一样的只是 128--255 的这一段。
其中 ASCII 值的范围为 0 ~ 127(十六进制:0 x 00 ~ 0 x 7 F)之间的值是可见字符;而超过 ASCII 范围的 128~255(十六进制:0 x 80 ~ 0 xFF)之间的值是不可见字符。
GBK
国人定义的编码规则,为了满足汉字的使用
Unicode
这是一种所有符号的编码,是一个很大的集合,现在的规模可以容纳 100 多万个符号。每个符号的编码都不一样。
需要注意的是,Unicode 只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。
UTF-8
UTF-8 是 Unicode 的实现方式之一。UTF-8 是 Unicode 的实现方式之一。UTF-8 是 Unicode 的实现方式之一。
参考:字符编码的发展史 - 知乎 (zhihu.com),字符编码中ASCII、Unicode和UTF-8的区别 - 知乎 (zhihu.com) ASCII、Unicode、GBK、UTF-8转化
base 64
base 64 是为了解决不可见字符串的网络传输和数据保存问题。用可见文本传输不可见二进制数据的
Base 64 的内容是有 0 ~ 9,a ~ z,A ~ Z,+,/ 组成,正好 64 个字符,这些字符是在 ASCII 可表示的范围内,属于 95 个可见字符的一部分。

Cookie、Session、Token 和 JWT
http 协议是无状态的,所以这就导致了服务器无法知道是谁在浏览网页,但很明显,一些网页需要知道用户的状态,例如登陆,购物车等。所以有了 cookie 等技术。
Cookie
是浏览器实现的一种数据存储功能,是服务器传给客户端并保存在客户端的一段信息
-
会话级别 Cookie:所谓会话级别 Cookie,就是在浏览器关闭之后 Cookie 就会失效。
-
持久级别 Cookie:保存在硬盘的 Cookie,只要设置了过期时间就是硬盘级别 Cookie
保存在客户端,不占用服务器资源。但是存在安全问题,容易被盗,容易泄密。
Session
Session 是基于 Cookie 来工作的,同一个客户端每次访问服务器时,只要当浏览器在第一次访问服务器时,服务器设置一个 id 并保存一些信息 (例如登陆就保存用户信息,视具体情况),并把这个 id 通过 Cookie 存到客户端,客户端每次和服务器交互时只传这个 id,就可以实现维持浏览器和服务器的状态,而这个 ID 通常是 NAME 为 JSessionID 的一个 Cookie。session 的信息是通过 session_id 获取的,而 session_id 是存放在会话 cookie 当中的
Session 的声明周期是从创建到超时过期。也就是说,当 Session 创建后,浏览器关闭,会话级别的 Cookie 被销毁,如果没有超过设定时间,该 SessionID 对应的 Session 是没有被销毁的。
注意:因为 Session 保存在服务器上,所以 Session 默认机制下是不适合分布式部署的。
安全性高。但是 Session 是保存在服务端的,每个用户都会产生一个 Session,并发访问多的话,每个用户都会生成 Session,消耗内存
Token
Token 我们一般称为令牌,一般通过 MD 5、SHA 算法将密钥、公钥、时间戳等元素加密产生的加密字符串。Token 的出现解决了 Session 的弊端。
过程:用户登录校验,校验成功后就返回 Token 给客户端;客户端收到数据后保存在客户端;客户端每次访问 API 是携带 Token 到服务器端;服务器端采用 filter 过滤器校验。校验成功则返回请求数据,校验失败则返回错误码
使用 token 的好处:
-
随机性、不可预测性、时效性、无状态、跨域等特点
-
可以避免 CSRF 攻击
-
可以是无状态的,可以在多个服务间共享
JWT
JWT 全称“JSON Web Token”,是实现 Token 的机制。