【问题标题】:Encoding scheme for cookie storage in browsers浏览器中 cookie 存储的编码方案
【发布时间】:2014-10-28 01:10:05
【问题描述】:
根据 ECMA-262 第 5 版:
符合本国际标准的实施应
解释符合 Unicode 标准的字符,版本
3.0 或更高版本和 ISO/IEC 1064 6-1,采用 UCS-2 或 UTF-16 作为采用的编码形式,实现级别 3。如果采用 ISO/IEC
10646-1 子集没有另外指定,假定为
BMP子集,集合300。如果采用的编码形式不是
否则,假定为 UTF-16 编码形式。
这让我想到以下问题:
- ECMAScript 标准推荐的 UTF-16 或 UCS-2
指用于存储目的的编码形式或
计算目的?
- 什么字符编码(用于存储目的)用于在客户端存储 cookie?
- 另外,由于 HTTP 标头值不允许非 US-ASCII 字符,浏览器是否在将 cookie 发送到服务器之前将字符编码更改为 ASCII?
我对浏览器用于存储 cookie 的字符编码特别感兴趣,因为这可以让我计算每个 cookie 可以使用的实际字节数。
【问题讨论】:
标签:
javascript
cookies
browser
unicode
utf-16
【解决方案1】:
1.ECMAScript标准推荐的UTF-16或UCS-2是指用于存储目的或计算目的的编码形式?
计算,就像 ECMAScript 一样,只指定呈现给脚本的接口,而不是如何在幕后实现。实现可以使用任何形式的字符串存储(例如,它可以优化纯 ASCII 字符串,使每个 ECMAScript char/UTF-16 代码单元只占用一个字节)。
2.什么字符编码(用于存储目的)用于在客户端存储cookie?
ECMAScript 或任何其他网络标准未指定。 IE 将 cookie 文件存储在特定于语言环境的默认代码页(也称为 ANSI)中。其他一些浏览器使用 SQLite 数据库,通常使用 UTF-8。
3.另外,由于 HTTP 标头值不允许非 US-ASCII 字符,浏览器是否在将 cookie 发送到服务器之前将字符编码更改为 ASCII?
因浏览器而异。上次我检查:IE 编码为 ANSI。 Chrome 使用 UTF-8。 Firefox 使用每个 UTF-16 代码单元的低字节(对于支持的字符与 ISO-8859-1 兼容,否则无法恢复)。 Safari 完全阻止非 ASCII。
结果:实际上非 ASCII 字符在 cookie 中根本不可用。如果您需要 Unicode 安全和/或更大容量,请使用DOM Storage。
我对浏览器用于存储 cookie 的字符编码特别感兴趣,因为这可以让我计算每个 cookie 可以使用的实际字节数。
浏览器限制vary widely在任何情况下。