是一个Unicode的用户代理HTTP标头内是否合法?(Is a unicode user agen

2019-09-16 21:28发布

应用程序我保持负载从网络日志提取到使用“latin1的”字符集一个MySQL表列的用户代理。 偶尔,它无法加载,看起来像这样用户代理:

Mozilla/5.0 (Iâ?; CPU iPhone OS 5_0_1 like Mac OS X) AppleWebKit/534.46 (KHTML^C like Gecko) Version

我怀疑这是窒息Iâ? 。 我的工作弄清楚这是否应该得到支持,或者如果它是由上游的日志系统介绍了腐败。 这是一个HTTP标头中的合法用户代理?

Answer 1:

RFC 2616(HTTP 1.1) 表示该消息头部内容必须是“由...组成任*TEXT或令牌,分离器的组合,以及引用字符串”。 如果你看一下定义为TEXT等你会发现,法律性质是那些具有字节值不在[0,31]范围和不等于127; 因此字符如â是,据我可以告诉合法的,因为每规范。



Answer 2:

从技术上讲,八位字节> 127允许在注释中。 2616让他们默认为ISO-8859-1,但HTTPbis(RFC 2616即将改版机)已删除该规则,这样有时在遥远的未来,我们也许能够移动到一个理智的编码。

建议:去除所有八位位组> 127。



Answer 3:

HTTP 1.1 RFC2616指ISO-8859-1,这是一种基于拉丁文单字节字符集。

与HTTP流量应该是单字节的考虑,我也是使用latin1字符我类似的日志设置。 这个决定只是为了让我的小指标。

如果使用UTF8与VARCHAR,仅是多字节字符需要额外的字节,所以在表空间中,它没有太大的额外费用。 然而,索引存储固定宽度,所以,他们与以防万一空格填充你需要他们(UTF8指标是三倍大LATIN1索引)。

如果偶尔奇头不可读它不会影响我。 但是,如果你不是索引列,你可能也使用UTF8。



文章来源: Is a unicode user agent legal inside an HTTP header?