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

Encoding scheme for cookie storage in browsers

本文关键字:编码方案 存储 cookie 浏览器      更新时间:2023-09-26

根据ECMA-262第5版:

本国际标准的一致实施应解释符合Unicode标准版本的字符3.0或更高版本和ISO/IEC 1064 6-1,UCS-2或UTF-16作为采用的编码形式,实现级别3。如果采用ISO/IEC10646-1子集没有另行指定,它被认为是BMP子集,集合300。如果采用的编码形式不是除非另有说明,否则假定为UTF-16编码形式。

这就引出了以下问题:

  1. ECMAScript标准推荐的UTF-16UCS-2指用于存储目的的编码形式,或计算目的
  2. 什么字符编码(用于存储目的)用于在客户端上存储cookie
  3. 此外,由于HTTP标头值不允许非US-ASCII字符,浏览器在向服务器发送cookie之前是否将字符编码更改为ASCII

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

1.ECMAScript标准推荐的UTF-16或UCS-2是指用于存储或计算目的的编码形式?

与ECMAScript一样,计算只指定呈现给脚本的接口,而不是如何在幕后实现。一个实现可以使用任何形式的字符串存储(例如,它可以优化仅ASCII的字符串,使每个ECMAScript char/UTF-16代码单元只占用一个字节)。

2.什么字符编码(用于存储目的)用于在客户端上存储cookie?

ECMAScript或任何其他web标准未指定。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存储。

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

浏览器限制在任何情况下都有很大差异。