Почему HTTP называют протоколом без состояния (stateless)?
- Почему серверу нужны cookie?
Каждый запрос HTTP независим: сервер не помнит предыдущие. Чтобы связать запросы одного пользователя, нужен явный механизм — cookie с идентификатором сессии или токен.
- Сессия: данные на сервере, в cookie — только id
- Токен: данные подписаны и лежат у клиента
- Stateless упрощает масштабирование серверов
А ещё Keep-alive переиспользует соединение, но состояние не добавляет
Подробно
Отсутствие состояния относится к протоколу, а не к приложению: данные сервер, конечно, хранит, но не обязан помнить контекст предыдущего обращения. Именно поэтому появились cookie: браузер прикладывает их автоматически, и сервер узнаёт пользователя. Отсюда же берётся уязвимость к CSRF — раз cookie отправляется автоматически, чужой сайт может спровоцировать запрос от имени пользователя. Постоянное соединение (keep-alive) существует, но к состоянию отношения не имеет — это оптимизация транспорта.
Что хотят услышать
- Смысл stateless.
- Механизмы связывания запросов.
Частые ошибки
- Путать отсутствие состояния в протоколе с отсутствием данных на сервере.
- Считать, что каждый запрос обязательно открывает новое соединение.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Потому что сервер не хранит никаких данных вообще — ни в памяти, ни в базе
- ✓Каждый запрос самодостаточен; связь между запросами дают cookie или токены
- ✗Потому что соединение закрывается после каждого запроса
- ✗Потому что запросы нельзя отправлять параллельно
Что спросят дальше
- Чем cookie отличается от серверной сессии?
- Почему сессионная модель уязвима к CSRF?
Разбор темы
- HTTP, cookies и сессии
Семантика HTTP-методов и кэширование, cookies и их флаги безопасности, stateful против stateless сессий, HTTPS и граница authn/authz.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.