用于浏览器中cookie存储的编码方案

时间:2014-09-03 13:40:27

标签: javascript cookies browser unicode utf-16

根据ECMA-262第5版:

  

本国际标准的符合实施应   解释符合Unicode标准版本的字符   3.0或更高版本以及ISO / IEC 1064 6-1,采用UCS-2或UTF-16作为采用的编码形式,实现级别3.如果采用ISO / IEC   10646-1子集没有另外指定,它被假定为   BMP子集,集合300.如果采用的编码形式不是   如果另有规定,则推定为UTF-16编码格式。

这让我想到以下问题:

  1. ECMAScript标准推荐的 UTF-16 UCS-2 指用于存储目的或的编码形式 计算目的?
  2. 使用什么字符编码(存储目的)在客户端上存储Cookie?
  3. 此外,由于HTTP标头值不允许非US-ASCII字符,浏览器是否会在将Cookie发送到服务器之前将字符编码更改为ASCII?
  4. 我对用于存储 cookie的字符编码浏览器特别感兴趣,因为这可以让我计算每个cookie可以使用的实际字节数。

1 个答案:

答案 0 :(得分: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。

Upshot:实际上,非ASCII字符在cookie中根本不可用。如果您需要Unicode安全性和/或更大容量,请使用DOM Storage

  

我对用于存储Cookie的字符编码浏览器特别感兴趣,因为这样可以让我计算出每个Cookie可以使用的实际字节数。

浏览器在任何情况下限制vary widely