PHP: Разработка микрофреймворка

Теория: Заголовки HTTP

Работа с HTTP-заголовками в PHP

В PHP работа с HTTP-заголовками встроена в язык. Мы можем читать заголовки входящего запроса и отправлять заголовки в ответе без дополнительных библиотек.

Типичный пример - обработчик авторизации. После успешной проверки данных сервер делает редирект на главную страницу.

Как получить заголовки запроса

Самый удобный способ - функция getallheaders().

<?php

$headers = getallheaders(); // $_SERVER тоже содержит заголовки
error_log(print_r($_SERVER, true));

print_r($headers);

Она возвращает заголовки в привычном виде, как их отправил клиент.

Заголовки также доступны в $_SERVER, но формат там менее удобный:

  • Имена преобразованы в верхний регистр.
  • Перед именем добавлен префикс HTTP_.
  • Дефисы заменены на подчеркивания.

Поэтому для прикладной логики чаще используют getallheaders().

Как отправить заголовки ответа

Для кода ответа используют http_response_code(), а для самих заголовков - header().

Пример из обработчика POST /sign_in:

<?php

$app->post('/sign_in', function (array $params, array $arguments): string {
    $headers = getallheaders();

    error_log(print_r($_SERVER, true));
    http_response_code(302);
    header('Location: http://localhost:8080');

    return print_r($headers, true);
});

Этого достаточно, чтобы клиент перешел на новый URL.

Что происходит при редиректе

Если посмотреть ответ через curl, видно следующее:

  • Сервер возвращает статус 302 Found.
  • Сервер отправляет заголовок Location.
  • Клиент делает новый запрос по адресу из Location.

Проверка без перехода:

curl -i -X POST http://localhost:8080/sign_in

Проверка с автоматическим переходом по редиректу:

curl -i -L -X POST http://localhost:8080/sign_in

Флаг -L включает follow redirect: curl сам выполняет следующий запрос.

Практический вывод

В этой теме важно запомнить базовую связку:

  • Читать заголовки через getallheaders().
  • Выставлять статус через http_response_code().
  • Отправлять заголовки через header().

С этой основой можно уверенно реализовать авторизацию, редиректы и другие стандартные HTTP-сценарии.

Рекомендуемые программы

Дальше

Завершено

0 / 11

+7 800 100 22 47

бесплатно по РФ

+7 495 085 21 62

бесплатно по Москве

108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845