В чем разница между браузерными хранилищами?
DOM и браузер
Браузерные хранилища — cookie, localStorage, sessionStorage, IndexedDB — различаются объёмом, сроком жизни, областью и тем, отправляются ли на сервер.
Сравнение
- Cookie — ~4 КБ, отправляется на сервер с каждым запросом, срок настраивается, есть
HttpOnly/Secure/SameSite. Для сессий и авторизации. - localStorage — ~5–10 МБ, бессрочно, только клиент, общий для вкладок origin. Синхронный. Для настроек и долгих данных.
- sessionStorage — ~5 МБ, живёт на время вкладки, изолирован для неё, только клиент. Для временного состояния.
- IndexedDB — большие объёмы (сотни МБ+), асинхронный, структурированные данные с индексами. Для офлайна и кеша.
Различия
- Отправка на сервер: только cookie.
- Срок жизни: cookie (настраивается), localStorage (вечно), sessionStorage (вкладка), IndexedDB (вечно).
- Объём: cookie наименьший, IndexedDB наибольший.
- API: cookie/Storage — синхронные и простые; IndexedDB — асинхронный и сложный.
Безопасность
Токены — в память или HttpOnly-cookie; не в localStorage (уязвим к XSS).
Коротко для собеседования
Cookie — маленькие, шлются на сервер, для авторизации; localStorage — большой, бессрочный, только клиент; sessionStorage — как localStorage, но на вкладку; IndexedDB — большие структурированные данные и офлайн. Различия: объём, срок, область, отправка на сервер.