【问题标题】: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 编码形式。

这让我想到以下问题:

  1. ECMAScript 标准推荐的 UTF-16UCS-2 指用于存储目的的编码形式或 计算目的?
  2. 什么字符编码(用于存储目的)用于在客户端存储 cookie?
  3. 另外,由于 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在任何情况下。

    【讨论】:

      猜你喜欢
      • 2021-10-13
      • 2018-10-30
      • 2021-06-29
      • 2021-06-04
      • 2017-10-07
      • 1970-01-01
      • 1970-01-01
      • 2020-05-05
      • 1970-01-01
      相关资源
      最近更新 更多