Каковы требования и ограничения к использованию cookies?

Я прочитал о куки и ограничениях, а также наткнулся на конкретные <a href="http://browsercookielimits.iain.guru/" rel="nofollow">цифры</a> из тестов. Однако мне не понятно, к каким аспектам они относятся. <br/> <pre><code>300 cookies in total
4096 bytes per cookie
20 cookies per domain
81920 bytes per domain</code></pre> <br/> <br/> В первую очередь, мне интересно, как правильно использовать термины "cookie" и "cookies". Правильно ли будет считать, что "кука" — это одна пара ключ+значение, а "куки" — это целая строка таких пар? Для ясности я буду использовать термины "куки-строка" (например, username=Sam; age=40) и "куки-элемент" (например, username=Sam). Есть ли какие-либо общепринятые термины для этих понятий? <br/> <br/> Что касается ограничения в 20 cookies per domain — правильно ли я понимаю, что куки-строка привязана к паре origin+path? То есть, у каждой страницы сайта есть своя уникальная куки-строка, и куки-элементы из этой строки могут быть доступны другим страницам с помощью атрибутов domain и path. Получается, что 20 cookies per domain означает, что на странице может быть только 20 куки-элементов? <br/> <br/> Что означает 4096 bytes per cookie? Это ограничение касается одного куки-элемента (включая как ключ, так и значение), или же всей куки-строки? <br/> <br/> Что подразумевается под 300 cookies in total? Это означает, что мы можем сохранить куки только для 300 страниц, или же это обращается к общему количеству куки-элементов, которые могут храниться на всех куки-строках (при этом количество самих куки-строк не ограничено)?
  • 15 января 2025 г. 8:14
Ответы на вопрос 2
Давайте разберем ваши вопросы по порядку.

1. **Термины "cookie" и "cookies"**:
   - В английском языке "cookie" (в единственном числе) обозначает один элемент, а "cookies" (во множественном числе) — несколько элементов (или куки в целом). Куки (cookie) в веб-контексте — это структура данных, которая хранит пару "ключ-значение", где ключ — это имя куки, а значение — это данные.
   - Ваше предложение использовать термины "куки-строка" для обозначения целой строки и "куки-элемент" для одного элемента вполне разумно. Однако, как правило, все еще чаще используют просто "cookie" для обозначения как отдельного элемента, так и всей строки в терминах веб-разработки.

2. **Ограничение в 20 cookies per domain**:
   - Здесь имеется в виду, что в пределах одного домена (с учетом настроек path) вы можете сохранять не более 20 kuки-элементов. Ограничения по кукам действительно зависят от "origin" (сочетание протокола, домена и номера порта) и "path" (путь на сервере). Это означает, что если куки имеют разные пути или домены, они могут храниться отдельно и не будут считаться в это ограничение.

3. **Что означает 4096 bytes per cookie**:
   - Это ограничение касается одного куки-элемента, т.е. как ключ, так и значение этого элемента должны в совокупности занимать не более 4096 байт. Таким образом, если ключ и значение (например, имя cookie и его значение) вместе превышают этот лимит, такой куки не будет сохранено.

4. **Что подразумевается под 300 cookies in total**:
   - Это ограничение относится к общему количеству куки-элементов, которые могут быть сохранены в браузере. То есть, в общем у пользователя есть возможность хранить до 300 куки-элементов, независимо от того, на каких страницах или доменах они созданы. Это общее ограничение, и оно не связано с количеством отдельных куки-строк.

Таким образом, при разработке веб-приложений важно учитывать эти ограничения для правильного использования куков. Это поможет предотвратить ситуации, когда куки не сохраняются или теряются из-за превышения лимитов.
Все эти "странные" числа уходят корнями в документ RFC 2109, актуальная версия которого датируется 1997 годом. В исторической перспективе это ненамного позже крылатого выражения "640 кб памяти хватит всем", так что 300 печенек на всех - это реалии того времени. Интернета еще толком не было. Браузеры, которые были тогда, уже вымерли. Не стоит воспринимать эти числа как актуальную информацию и вчитываться в написание слов. 

На текущий момент нам нужно читать RFC 6265 . Там в лимитах значится, что бразуеры должны как минимум обеспечить:

Здесь трактовки конкретные, поясняется, что есть размер в 4096 bytes. Домен здесь - это домен, про пути в документе везде говорится отдельно. Если возникают сложности с трактовкой терминов, то стоит пролистать документ в начало и почитать, там весь механизм подробно расписан. По поводу общего количества кук - скорее всего современные браузеры делают больше, чем минимально необходимо по стандарту, но это гадание на кофейной гуще, точно мы не знаем, вероятно у всех по-разному.
Похожие вопросы