Что такое HTTP cookie и для чего они используются

«Что такое HTTP cookie и для чего они используются» — вопрос из категории Сети, который задают на 22% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

HTTP cookie — это небольшой фрагмент данных, который веб-сервер отправляет в HTTP-ответе, а браузер клиента сохраняет у себя. При последующих запросах к этому же серверу браузер автоматически прикрепляет cookie обратно, позволяя серверу "узнать" пользователя или запомнить его состояние.

Основные цели использования:

  1. Управление сессией: Аутентификация пользователей, хранение содержимого корзины в интернет-магазине.
  2. Персонализация: Сохранение пользовательских настроек, таких как тема оформления, язык или местоположение.
  3. Отслеживание (Tracking): Сбор статистики о поведении пользователя на сайте, анализ предпочтений для показа релевантной рекламы.

Ключевые атрибуты cookie:

  • Expires / Max-Age: Время жизни cookie.
  • Domain / Path: Определяют, на какие URL будет отправляться cookie.
  • Secure: Флаг, указывающий, что cookie следует отправлять только по зашифрованному HTTPS-соединению.
  • HttpOnly: Флаг, запрещающий доступ к cookie из JavaScript на клиенте. Это важная мера защиты от XSS-атак (Cross-Site Scripting).
  • SameSite: Контролирует, будет ли cookie отправляться в межсайтовых запросах, защищая от CSRF-атак (Cross-Site Request Forgery).

Пример работы в Python (с использованием Flask):

from flask import Flask, make_response, request

app = Flask(__name__)

@app.route('/set-cookie')
def set_cookie():
    # Создаем ответ
    resp = make_response("Cookie 'user_id' установлен!")
    # Устанавливаем cookie с именем 'user_id', значением '123',
    # сроком жизни 1 час и флагом HttpOnly для безопасности
    resp.set_cookie('user_id', '123', max_age=3600, httponly=True)
    return resp

@app.route('/get-cookie')
def get_cookie():
    # Читаем cookie из входящего запроса
    user_id = request.cookies.get('user_id')
    if user_id:
        return f"Привет, пользователь с ID: {user_id}!"
    return "Cookie 'user_id' не найден."

Важно помнить: Cookie хранятся на стороне клиента, их размер ограничен (~4 КБ), и они могут быть просмотрены или изменены пользователем. Поэтому в них нельзя хранить конфиденциальную информацию в открытом виде.