Компьютерные сети

HTTP заголовки

Заголовки - невидимая часть каждого запроса, которая управляет всем: авторизацией, кешированием, безопасностью. Одна неправильная настройка Cache-Control - и пользователи видят устаревшие данные. Одна неправильная cookie - и сессия украдена.

  • **Оптимизация:** правильный Cache-Control ускоряет сайт в разы
  • **Безопасность:** HttpOnly + Secure cookies защищают сессии
  • **Интеграция:** CORS позволяет frontend и backend на разных доменах

Предварительные знания

  • HTTP: The Language of the Web

Заголовки HTTP

**HTTP-заголовки** - метаданные запроса или ответа в формате `Имя: Значение`. Заголовки управляют кешированием, аутентификацией, форматом данных, безопасностью. Делятся на заголовки запроса, ответа и общие.

**Host обязателен!** В HTTP/1.1 заголовок Host: обязателен - он указывает домен. Один IP может хостить много сайтов (virtual hosts), и сервер выбирает нужный по Host.

Какой заголовок обязателен в HTTP/1.1 запросах?

Content-Type и MIME

**Content-Type** указывает формат тела сообщения. Использует MIME-типы (Multipurpose Internet Mail Extensions). Формат: `тип/подтип; параметры`. Без правильного Content-Type браузер может неверно интерпретировать данные.

**charset важен!** `Content-Type: text/html; charset=utf-8` - без charset браузер может неправильно декодировать текст (кракозябры). Для JSON charset не нужен - он всегда UTF-8 по спецификации.

Какой Content-Type нужен для отправки JSON в API?

Cookies

**Cookies** - способ хранить состояние в stateless HTTP. Сервер устанавливает куку через `Set-Cookie`, браузер автоматически отправляет её в последующих запросах через `Cookie`. Используются для сессий, настроек, трекинга.

**Third-party cookies умирают.** Браузеры блокируют куки с других доменов (трекеры). Chrome планирует полностью удалить third-party cookies. Для трекинга теперь нужны альтернативы (first-party data, Privacy Sandbox).

Зачем флаг HttpOnly у cookie?

Кеширование

**Cache-Control** - главный заголовок управления кешем. Указывает, можно ли кешировать, как долго, кому. Правильное кеширование ускоряет сайты и снижает нагрузку на сервер. Неправильное - показывает устаревшие данные.

**immutable** говорит: файл никогда не изменится. Используй для версионированных файлов (style.abc123.css). Браузер не будет делать conditional request - файл всегда свежий, пока в кеше.

Что означает Cache-Control: no-cache?

CORS

**CORS** (Cross-Origin Resource Sharing) - механизм безопасности браузера. По умолчанию JavaScript не может делать запросы к другим доменам (same-origin policy). CORS позволяет серверу разрешить кросс-доменные запросы через специальные заголовки.

**CORS - защита браузера, не сервера!** curl и Postman игнорируют CORS. Сервер получит запрос в любом случае. CORS защищает пользователя: злой сайт не сможет через браузер жертвы сделать запрос к её банку.

CORS ошибки означают проблему с клиентским кодом

CORS настраивается на сервере - он должен отправить правильные заголовки

Браузер просто исполняет политику. Если сервер не отправляет Access-Control-Allow-Origin, браузер блокирует ответ. Решение - настроить CORS на сервере (или использовать прокси).

Что делает браузер перед «непростым» кросс-доменным запросом?

Ключевые идеи

  • **Content-Type** указывает формат данных (application/json, text/html)
  • **Cookies** хранят состояние; HttpOnly + Secure + SameSite - обязательны
  • **Cache-Control** управляет кешированием; no-store ≠ no-cache
  • **CORS** разрешает кросс-доменные запросы; настраивается на сервере

Связанные темы

Заголовки работают вместе с другими концепциями:

  • HTTPS и TLS — Secure cookies требуют HTTPS
  • HTTP/2 — Сжатие заголовков через HPACK
  • CDN — Cache-Control управляет кешированием на CDN

Вопросы для размышления

  • Почему нельзя использовать Access-Control-Allow-Origin: * с credentials?
  • Как версионирование файлов (app.abc123.js) связано с кешированием?
  • Почему SameSite=Strict может сломать некоторые сценарии?

Связанные уроки

  • bt-05-http-fundamentals
HTTP заголовки

0

1

Войти