Схема кодирования для хранения куки в браузерах

Согласно ECMA-262 5-е издание:

Соответствующая реализация этого международного стандарта должна интерпретировать символы в соответствии со стандартом Unicode версии 3.0 или новее и ISO/IEC 1064 6-1 с использованием UCS-2 или UTF-16 в качестве принятой формы кодирования, уровень реализации 3. Если Принятое подмножество ИСО / МЭК 10646-1 не указано иным образом, предполагается, что оно является подмножеством BMP, коллекция 300. Если принятая форма кодирования не указана иным образом, она считается формой кодирования UTF-16.

Это подводит меня к следующим вопросам:

  1. UTF-16 или UCS-2, рекомендованный стандартом ECMAScript, относится к форме кодирования, которая будет использоваться в целях хранения иливычисления?
  2. Какая кодировка символов (для целей хранения) используется для хранения файлов cookie на клиенте?
  3. Кроме того, поскольку значения заголовка HTTP не допускают использование символов, отличных от US-ASCII, изменяет ли браузер кодировку символов на ASCII перед отправкой файлов cookie на сервер?

Меня особенно интересует использование браузерами кодировки символов для хранения файлов cookie, поскольку это позволило бы мне рассчитать фактическое количество байтов, которое я мог бы использовать для каждого файла cookie.

1 ответ

Решение

1. UTF-16 или UCS-2, рекомендованный стандартом ECMAScript, относится к форме кодирования, которая будет использоваться в целях хранения или вычисления?

Вычисления, поскольку ECMAScript определяет только интерфейс, представляемый вашим сценариям, а не то, как это реализовано за кулисами. Реализация может использовать любую форму хранения строк (например, она может оптимизировать строки только для ASCII так, чтобы они занимали только один байт на единицу кода ECMAScript char/UTF-16).

2. Какая кодировка символов (для целей хранения) используется для хранения файлов cookie на клиенте?

Не указано ECMAScript или любым другим веб-стандартом. IE хранит файлы cookie в кодовой странице по умолчанию для конкретной локали (иначе ANSI). Некоторые другие браузеры используют базы данных SQLite, как правило, с UTF-8.

3. Кроме того, поскольку значения заголовка HTTP не допускают использование символов, отличных от US-ASCII, браузер изменяет кодировку символов на ASCII перед отправкой файлов cookie на сервер?

Зависит от браузеров. В прошлый раз я проверял: IE кодирует в ANSI. Chrome использует UTF-8. Firefox использует младший байт каждого кодового блока UTF-16 (совместимый с ISO-8859-1 для символов, которые поддерживают, иначе безвозвратно искажен). Safari полностью блокирует не-ASCII.

Вверх: на практике не-ASCII символы вообще не могут использоваться в файлах cookie. Если вам нужна безопасность Unicode и / или большая емкость, используйте DOM Storage.

Меня особенно интересует использование браузерами кодировки символов для хранения файлов cookie, поскольку это позволило бы мне рассчитать фактическое количество байтов, которое я мог бы использовать для каждого файла cookie.

В любом случае ограничения браузера сильно различаются.

Другие вопросы по тегам