HTTP Basic头额外字节含义咨询:TP-LINK TL-WR841N路由器认证异常
咱们先拆解你拿到的这个Cookie值:Basic%20YWRtaW46MjEyMzJmMjk3YTU3YTVhNzQzODk0YTBlNGE4MDFmYzM%3D,你疑惑的%20和%3D并不是所谓的“额外字节”,而是URL编码(Percent-encoding)后的常规字符,具体含义如下:
1. %20:空格字符的URL编码
%20对应的是ASCII码为32的空格字符。这里的Basic%20其实是HTTP Basic认证格式里的固定前缀——按照标准逻辑,Basic认证的凭证格式是Basic <base64字符串>,空格用来分隔"Basic"标识和后续的编码内容。只是因为Cookie值里不能直接包含空格这类特殊字符,所以浏览器自动把空格编码成了%20。
2. %3D:等号字符的URL编码
%3D对应的是等号(=)。Base64编码本身会用等号作为填充字符,目的是让编码后的字符串长度刚好是4的倍数。你看到的末尾%3D,就是原始Base64字符串末尾的填充=被URL编码后的结果——这个等号本来就是Base64编码的一部分,不是额外添加的。
为什么会产生“额外字节”的误解?
TP-LINK这个路由器的实现确实偏离了RFC 7617的标准(标准要求是Base64(username:password),但它用的是Base64(username:md5(password))),但%20和%3D是Cookie传输时的常规操作:
- Cookie的取值对特殊字符有严格限制,空格、等号这类字符必须被URL编码,否则会导致服务器解析出错,所以浏览器会自动做这个编码转换。
- 另外,标准的Basic认证是把凭证放在HTTP请求头的
Authorization字段里,但TP-LINK把它放到了Cookie的Authorization键里,这也让这个格式看起来更“奇怪”,但编码部分是符合URL规则的。
简单总结一下:
%20= 空格,是"Basic"和Base64字符串之间的分隔符编码%3D= 等号,是Base64填充字符的编码
这些都是URL编码的常规操作,并不是路由器额外添加的字节,只是因为你直接看到的是编码后的Cookie值,才会误以为是多余内容~
内容的提问来源于stack exchange,提问作者Nouman Tajik
相关产品推荐
相关产品推荐

