当我构建RESTful客户端和服务器时,使用percent-encoding和HTTP标头(请求或响应)是否合适或必要,或者这种类型的编码是否只适用于URI?
答案 0 :(得分:2)
因为当我搜索到这个问题时,这个问题出现在顶部,并且因为问题HTTP header should use what character encoding?没有具体回答关于百分比编码的问题,我试着简洁地回答OP的问题,即使它已经有一些年龄了:
基本上没有,但见下文。
RFC2616仅针对URI(搜索%
或HEX HEX
或percent
)描述了百分比编码,并且定义了field-value
而未提及百分比编码
但是,RFC2616允许头字段值中的任意八位字节(CTL
s除外),并且对于不在ISO-8859-1中的字符有一个提到MIME编码(RFC2047)的半生不熟的语句(参见定义其Section 2.2中的TEXT
。我把这句话称为“半生不熟”,因为它没有说明ISO-8859-1是用于解释八位字节的强制字符集,但尽管如此,它规范地要求对外面的字符使用MIME编码那个字符集。看来,ISO-8859-1的使用和标题字段值的MIME编码都没有得到广泛支持。
HTTPbis似乎放弃了这一点,并返回到US-ASCII表示头字段值。有关详细信息,请参阅this answer。
我对此的解读是:
对于标准标题字段(RFC2616中定义的字段),不允许使用百分比编码。
对于扩展标头字段,RFC2616中没有描述百分比编码,但只要生成的字符是US-ASCII(如果需要),就可以应用各种编码,包括百分比编码为了面向未来)。只是不要认为 使用百分比编码。
我找到了更多来源:
答案 1 :(得分:0)
TL; DR:八位字节百分比编码和base64编码都可以。
指示HTTP标头字段参数的字符编码和语言 https://tools.ietf.org/html/rfc8187
此文档指定了适合在HTTP标头中使用的编码 字段...
阅读“ 3.2.3。示例”
base64 编码也很好,请阅读HTTP基本授权规范:https://tools.ietf.org/html/rfc7617