Путь запроса от ввода URL в браузере до полной отрисовки страницы на 1С-Битрикс

Share

1. Сетевой уровень: От клика до сервера

  1. DNS (Domain Name System): Браузер не знает, где живет site.ru. Он спрашивает у системы: «Какой IP у этого имени?». Система идет к провайдеру, тот к корневым серверам. Итог: получение IP-адреса (например, 1.2.3.4).
  2. TCP Three-Way Handshake: Браузер говорит серверу: «Привет, хочешь соединиться?». Сервер: «Привет, давай». Браузер: «Ок, начинаем». Это база для надежной передачи данных.
  3. TLS Handshake (HTTPS): Если сайт на SSL, клиент и сервер обмениваются сертификатами и создают секретный ключ шифрования. Теперь данные не украсть.
  4. HTTP-пакет: Браузер формирует текстовый запрос: метод (GET/POST), заголовки (User-Agent, Cookies) и сам URL.

2. Серверный уровень: Разделение труда

  1. Nginx (Front-end):
  2. Static Handling: Nginx смотрит на запрос. Если в конце .png или .css, он просто берет файл с диска через sendfile и отдает. Это в десятки раз быстрее, чем если бы это делал PHP.
  3. Reverse Proxying: Если запрос — это папка или .php, Nginx переупаковывает HTTP-запрос и перекидывает его на 127.0.0.1:8080 (где слушает Apache).
  4. Apache (Back-end):
  5. Чтение .htaccess: Это критический момент. Apache видит файл настроек в корне. Там стоит правило: «Если файла /catalog/shoes/ не существует физически, перенаправь запрос на index.php». Это и есть работа ЧПУ (человекопонятных URL).
  6. mod_php: В отличие от PHP-FPM, здесь интерпретатор — это часть самого процесса Apache. Он уже загружен и готов исполнять код немедленно.

3. Прикладной уровень: Ядро Битрикс

А. Инициализация (Prolog Before)

  1. Конфигурация: Битрикс лезет в bitrix/.settings.php (новый формат D7) и bitrix/php_interface/dbconn.php (старый формат). Там лежат данные для MySQL: HOST, USER, PASSWORD.
  2. Коннект к БД: PHP устанавливает соединение. Если оно падает — вылетает знаменитая ошибка «DB query error».
  3. Константы и Автозагрузка: Определяются пути (например, SITE_ID). Регистрируется автозагрузчик классов, чтобы можно было писать new \Bitrix\Main\User, не подключая файлы вручную.
  4. События (Events): Выполняются обработчики OnPageStart и OnBeforeProlog. Здесь работают кастомные скрипты или модули оптимизации.

Б. Сборка страницы

  1. Header (/bitrix/header.php):
  2. Запускает буферизацию вывода.
  3. Подключает файл /local/templates/ваш_шаблон/header.php.
  4. Там срабатывает метод $APPLICATION->ShowHead(), который позже подставит скрипты и стили.
  5. Компоненты (Workarea):
  6. В центре страницы стоит вызов bitrix:catalog или bitrix:news.
  7. Компонент идет в БД, делает запрос (например, SELECT * FROM b_iblock_element).
  8. Получает данные, кладет их в массив $arResult.
  9. Подключает файл template.php, где этот массив «размазывается» по HTML-тегам.
  10. Footer (/bitrix/footer.php): Закрывает верстку шаблона.

В. Эпилог (Epilog)

  1. Отложенные функции: Это «киллер-фича» Битрикса. Поскольку мы сначала собрали контент, а потом поняли, какой должен быть <title>, Битрикс на этом этапе берет весь накопленный в буфере HTML и заменяет в нем «заглушки» на реальные заголовки и JS-коды.
  2. Bitrix Component Cache: Если кэш включен, Битрикс сохраняет результат работы компонентов в файлы или Redis, чтобы в следующий раз не дергать БД.

4. Возврат и Рендеринг

  1. Final Output: Apache отдает готовый HTML-текст в Nginx.
  2. Gzip: Nginx на лету сжимает этот текст (из 100 Кб делает 20 Кб) и отправляет браузеру.
  3. Browser Rendering: Браузер получает HTML, строит дерево объектов (DOM), видит ссылки на картинки (которые Nginx отдает мгновенно) и собирает финальную картинку для пользователя.