背景
- url中的参数中存在http格式的参数,解析过程中会出现参数丢失,例 : a.com?p=https://b.58corp.com?c=22
解决过程
- 使用base64进行编码,但是sso会对"="进行过滤,导致解析base64的时候出问题
- 使用aes等加密算法,由于加密算法是基于字节的,因此仍然可能出现"="的问题
破局点
- 需求的本质实际上使用ascii的可见字符,并且局限在0-9,a-z,A-Z的范围内的字符对信息进行传输
- 进制,二进制,八进制,十六进制
最终解决方案
- 采用16进制对内容二次编码,第一次是utf-8将内容转换成ascii码,第二次将ascii码转换成16进制
选择原因
- 16进制可以使用2位表达所有的ascii码,相对于2进制字符长度变短,32进制存在浪费,在空间占用和16进制是一致的,都是2位表达一个ascii