Base64Url 是 Base64 的一个变体,在 RFC 4648 有定义。
有些人会把一段字符串变成 Base64 之后用在 URL,但 Base64 可能包含 +
、/
、=
这几个字符串,当你 encodeURIComponent
这个 URL 时,这些字符会进行百分号编码,例如 +
会被编码为 %2B
,这样会增加不必要的长度和阅读难度。如果你不想这样,可以使用 Base64Url。对于 Node.js,社区有一个 base64url 的库可以把字符串转为 Base64Url。
实现方法很简单,就是按照 RFC 4648 对 Base64Url 的定义,把 +
、/
分别改为 -
、_
,而 =
可以保留,也可以删了它,base64url 选择删了它。
=
在 Base64 中是一个有点特殊的字符,它总是出现在一段 Base64 的最后,是一个 padding character,因为 Base64 的字符数总是 4 的倍数,不足的部分以 =
补全,如果刚好是 4 的倍数,则没有 =
。base64url 中的 pad-string 函数,就是用于对 Base64Url 转换为正常字符串时,根据 Base64Url 的长度在末尾增加 =
。
相关文章: