HTTP заголовки: полное руководство
проверку HTTP-заголовков — это метаданные, которые передаются между клиентом (браузером) и сервером вместе с каждым HTTP запросом и ответом. Они определяют, как обрабатывать данные, какой контент возвращать, как кэшировать ответы и многое другое.
Как работают HTTP заголовки
Каждый HTTP запрос и ответ состоит из трёх частей: стартовая строка, заголовки и тело. Заголовки представляют собой пары «имя: значение», разделённые переводом строки:
GET /api/data HTTP/1.1
Host: example.com
Accept: application/json
Authorization: Bearer eyJhbGci...
User-Agent: Mozilla/5.0
Сервер отвечает с собственным набором заголовков:
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Cache-Control: max-age=3600
X-Request-Id: abc-123
Типы HTTP заголовков
Заголовки запроса (Request Headers)
Отправляются клиентом серверу и содержат информацию о запросе и клиенте:
| Заголовок | Описание | Пример |
|---|---|---|
Host | Доменное имя сервера (обязателен в HTTP/1.1) | Host: example.com |
Accept | Какие типы контента принимает клиент | Accept: text/html, application/json |
Accept-Language | Предпочитаемые языки ответа | Accept-Language: ru, en;q=0.8 |
Accept-Encoding | Поддерживаемые алгоритмы сжатия | Accept-Encoding: gzip, br |
Authorization | Учётные данные для аутентификации | Authorization: Bearer token123 |
Cookie | Cookies, ранее установленные сервером | Cookie: session=abc; theme=dark |
User-Agent | Информация о клиенте (браузер, ОС) | User-Agent: Mozilla/5.0... |
Referer | URL страницы, с которой пришёл запрос | Referer: https://google.com/ |
If-None-Match | ETag для условного запроса (кэширование) | If-None-Match: "abc123" |
If-Modified-Since | Дата для условного запроса | If-Modified-Since: Mon, 01 Jan 2025... |
Заголовки ответа (Response Headers)
Отправляются сервером клиенту и содержат информацию о ресурсе и инструкции для обработки:
| Заголовок | Описание | Пример |
|---|---|---|
Content-Type | MIME-тип возвращаемого контента | Content-Type: text/html; charset=utf-8 |
Content-Length | Размер тела ответа в байтах | Content-Length: 3842 |
Content-Encoding | Алгоритм сжатия тела ответа | Content-Encoding: gzip |
Set-Cookie | Установка cookie на клиенте | Set-Cookie: session=abc; HttpOnly; Secure |
Location | URL для перенаправления (3xx) или нового ресурса (201) | Location: https://example.com/new |
Server | Информация о веб-сервере | Server: nginx/1.24 |
ETag | Идентификатор версии ресурса | ETag: "abc123" |
Last-Modified | Дата последнего изменения ресурса | Last-Modified: Mon, 01 Jan 2025... |
Заголовки кэширования
Кэширование — одна из самых важных оптимизаций производительности. HTTP заголовки позволяют точно контролировать, как и где кэшируются ресурсы:
Cache-Control
Основной заголовок управления кэшем. Поддерживает множество директив:
max-age=3600— ресурс можно кэшировать на 3600 секундno-cache— кэшировать можно, но перед использованием нужно проверить на сервереno-store— полный запрет кэширования (для конфиденциальных данных)public— можно кэшировать на CDN и прокси-серверахprivate— кэшировать только в браузере пользователяmust-revalidate— после истечения max-age обязательно проверить на сервереimmutable— ресурс никогда не изменится (для файлов с хэшем в имени)
Стратегии кэширования
Статические ресурсы (CSS, JS, изображения) с хэшем в имени файла:
Cache-Control: public, max-age=31536000, immutable
HTML страницы, которые могут обновляться:
Cache-Control: no-cache
ETag: "v2.1.0-abc"
Конфиденциальные данные (личный кабинет, API документацию ответы с персональной информацией):
Cache-Control: no-store
Заголовки CORS
Cross-Origin Resource Sharing (CORS) позволяет серверу указать, какие домены могут обращаться к его ресурсам из браузера:
| Заголовок | Описание |
|---|---|
Access-Control-Allow-Origin | Разрешённый домен (или * для всех) |
Access-Control-Allow-Methods | Разрешённые HTTP методы |
Access-Control-Allow-Headers | Разрешённые заголовки запроса |
Access-Control-Max-Age | Время кэширования preflight-запроса |
Access-Control-Allow-Credentials | Разрешить отправку cookies |
Пример настройки для API:
Access-Control-Allow-Origin: https://myapp.com
Access-Control-Allow-Methods: GET, POST, PUT, DELETE
Access-Control-Allow-Headers: Content-Type, Authorization
Access-Control-Max-Age: 86400
Заголовки для SEO
Некоторые HTTP заголовки напрямую влияют на индексацию и SEO:
X-Robots-Tag: noindex— запрет индексации через HTTP (аналог meta robots)Link: </page>; rel="canonical"— каноничный URL через заголовокVary: Accept-Encoding— сообщает CDN, что контент зависит от сжатияContent-Language: ru— язык контента
Частые ошибки
- Отсутствие Content-Type — браузер может неправильно интерпретировать контент
- Cache-Control без стратегии — приводит к устаревшим данным или лишним запросам
- CORS: Access-Control-Allow-Origin: * с credentials — запрещено спецификацией и не работает
- Раскрытие Server и X-Powered-By — утечка информации о стеке, облегчает атаки
- Отсутствие заголовков безопасности — уязвимость к XSS, clickjacking, MIME-sniffing
Проверьте ваш сайт прямо сейчас
Проверить →