Расскажи про жизненный цикл HTTP-запроса к PHP-сайту.

«Расскажи про жизненный цикл HTTP-запроса к PHP-сайту.» — вопрос из категории Сети, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Когда пользователь открывает страницу, запрос проходит следующие этапы:

  1. Клиентская сторона: Браузер формирует HTTP-запрос (GET, POST и т.д.) и отправляет его на IP-адрес сервера через DNS.
  2. Веб-сервер (Nginx/Apache): Сервер принимает запрос на 80/443 порту. Nginx, который я часто использую, проверяет конфигурацию и определяет, что запрос к файлам .php должен быть передан обработчику.
  3. PHP-FPM: Nginx передает запрос процессу PHP-FPM (FastCGI Process Manager) через сокет или TCP. PHP-FPM выбирает свободный worker-процесс для обработки.
  4. Интерпретатор PHP: Worker загружает скрипт (например, index.php — единая точка входа фреймворка). Запускается автозагрузчик Composer, инициализируется ядро приложения (Laravel/Symfony), которое:
    • Парсит запрос (URL, заголовки, тело).
    • Находит соответствующий маршрут (роут).
    • Запускает посредников (middleware) для аутентификации, проверки CSRF-токена и т.д.
    • Вызывает контроллер или обработчик.
  5. Выполнение бизнес-логики: Контроллер взаимодействует с моделями, сервисами, делает запросы к базе данных через ORM (Eloquent/Doctrine).
  6. Формирование ответа: Приложение создает ответ — шаблон Blade/Twig, JSON-массив и т.д.
  7. Отправка ответа: Ответ проходит обратно через цепочку посредников, PHP-FPM возвращает его веб-серверу, который добавляет необходимые HTTP-заголовки и отправляет данные браузеру.

Важно: На высоконагруженных проектах мы кешируем ответ целиком (Nginx cache) или его части (Redis для сессий, данных), чтобы минимизировать выполнение полного цикла.