Какие знаешь заголовки в http запросе?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Заголовки HTTP-запроса: классификация и назначение
HTTP-заголовки — это метаданные запроса или ответа, передаваемые в виде пар "ключ-значение". Они позволяют клиенту и серверу обмениваться дополнительной информацией, управлять кешированием, аутентификацией, кодированием и другими аспектами взаимодействия. В PHP-разработке работа с заголовками осуществляется через суперглобальный массив $_SERVER (для входящих) и функции header()/setcookie() (для исходящих).
Основные категории заголовков запроса
-
Общие заголовки (General Headers)
Применяются как к запросам, так и к ответам:Cache-Control— управление кешированием (no-cache,max-age=3600).Connection— управление соединением (keep-alive,close).Date— дата и время формирования сообщения.
-
Заголовки запроса (Request Headers)
Содержат информацию о клиенте и предпочтениях:User-Agent— идентификатор клиентского приложения (браузер, библиотека).Accept— допустимые MIME-типы ответа (application/json,text/html).Accept-Language— предпочитаемые языки (ru-RU,en-US).Accept-Encoding— поддерживаемые алгоритмы сжатия (gzip,deflate).Authorization— данные для аутентификации (обычноBearer <токен>илиBasic <credentials>).Host— имя хоста (обязателен в HTTP/1.1).Referer— URL предыдущей страницы (часто используется для аналитики).
-
Заголовки сущности (Entity Headers)
Описывают тело запроса:Content-Type— MIME-тип тела (application/x-www-form-urlencoded,multipart/form-data).Content-Length— размер тела в байтах.Content-Encoding— кодирование тела (gzip).
Пример работы с заголовками в PHP
Чтение входящих заголовков:
Большинство заголовков запроса доступны в $_SERVER с префиксом HTTP_ (например, User-Agent становится HTTP_USER_AGENT). Исключения — Content-Type и Content-Length, которые обрабатываются отдельно.
// Получение заголовков из $_SERVER
$userAgent = $_SERVER['HTTP_USER_AGENT'] ?? 'Неизвестно';
$acceptLanguage = $_SERVER['HTTP_ACCEPT_LANGUAGE'] ?? 'ru';
// Специальные заголовки (без префикса HTTP_)
$contentType = $_SERVER['CONTENT_TYPE'] ?? '';
$contentLength = $_SERVER['CONTENT_LENGTH'] ?? 0;
// Альтернативный способ через apache_request_headers() (если доступно)
if (function_exists('apache_request_headers')) {
$headers = apache_request_headers();
$authorization = $headers['Authorization'] ?? '';
}
Отправка исходящих заголовков:
Используется функция header(), которая должна вызываться до любого вывода.
// Установка Content-Type для JSON-ответа
header('Content-Type: application/json; charset=utf-8');
// Реддирект с кодом 301
header('Location: /new-page', true, 301);
// Управление кешированием
header('Cache-Control: no-cache, must-revalidate');
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');
Практическое применение в backend-разработке
- Аутентификация и авторизация:
ЗаголовокAuthorizationс JWT-токенами стал стандартом для API. В PHP его можно обработать так:
$headers = getallheaders(); // Доступно не во всех конфигурациях
$authHeader = $headers['Authorization'] ?? '';
if (preg_match('/Bearer\s+(\S+)/', $authHeader, $matches)) {
$jwtToken = $matches[1];
// Декодирование и валидация токена
}
- CORS (Cross-Origin Resource Sharing):
Для API, доступных с разных доменов, необходимо устанавливать заголовки:
header('Access-Control-Allow-Origin: *'); // Или конкретный домен
header('Access-Control-Allow-Methods: GET, POST, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type, Authorization');
-
Оптимизация производительности:
ЗаголовкиAccept-EncodingиContent-Encodingпозволяют сжимать данные. В PHP можно использоватьob_gzhandler()для автоматического gzip-сжатия. -
Безопасность:
Заголовки безопасности, такие какX-Frame-Options(защита от кликджекинга),Content-Security-Policy(ограничение источников контента), часто устанавливаются на уровне веб-сервера, но могут управляться и из PHP.
Важные нюансы
- Заголовки не чувствительны к регистру, но принято использовать Title-Case (
User-Agent,Content-Type). - В PHP-FPM и Nginx некоторые заголовки (например,
Authorization) могут требовать дополнительной конфигурации. - Функция
header()не позволяет установить несколько заголовков с одинаковым именем — для этого нужно передавать строку со всеми значениями (актуально дляSet-Cookie).
Понимание HTTP-заголовков критически важно для разработки RESTful API, интеграции с внешними сервисами и оптимизации взаимодействия клиента и сервера. В современном PHP-стеке (особенно с использованием PSR-7 и фреймворков) работа с заголовками абстрагирована, но знание их семантики остаётся фундаментальным.