Как работает композитная технология
Многие элементы страниц сайта выглядят одинаково, например, шапка и подвал. У композитного сайта данные, одинаковые для всех пользователей (статические) хранятся в виде html-файла на сервере (кеш). И могут быть отданы сразу, без выполнения php-кода и запросов к базе данных. Данные, которые у пользователей различаются (корзина, личный кабинет) подгружаются в фоновом режиме, когда HTML уже отобразился в браузере. Эти данные называются динамическими. Параллельно с ними загружаются CSS, Javascript, шрифты, изображения.
При фоновом ajax-запросе Битрикс формирует страницу полностью. Из полученного html-кода вырезаются динамические данные и отправляются браузеру в формате json. Браузер вставляет полученные от сервера актуальные данные вместо специальных заглушек. А на сервере тем временем происходит обратный процесс — на место вырезанных динамических данных вставляются заглушки. После замены всей динамики на статику, считается контрольная сумма получившейся страницы. Если эта сумма не совпадает с контрольной суммой страницы в кеше — кеш перезаписывается.
В каком месте html-кода производить замены (на клиенте и на сервере) — задает программист специальной разметкой.
Страницу из кеша сервер отправляет браузеру с заголовком Last-Modified
, который сообщает дату
последнего изменения страницы — это дата создания файла на диске. Когда браузер получает ответ с таким заголовком,
то последующие свои запросы этой страницы он делает с заголовком If-Modified-Since
— изменилась
страница после даты Last-Modified
? И если страница не изменилась, то сервер вместо страницы отдает код
304 Not Modified
, а браузер берет страницу из локального кеша.
Когда страница отдается из кеша, добавляется заголовок X-Bitrix-Composite
со следующими значениями:
X-Bitrix-Composite: Cache (200)
отдача страницы из композитного кеша с кодом 200X-Bitrix-Composite: Cache (304)
отдача страницы из композитного кеша с кодом 304
Этот же заголовок добавляется в ответ сервера на ajax-запрос:
X-Bitrix-Composite: Ajax (stable)
кеш не изменился на этом хитеX-Bitrix-Composite: Ajax (changed)
кеш изменился на этом хите
Страница из кеша отправляется с заголовком Last-Modified
, который сообщает дату последнего изменения
страницы — это дата создания файла на диске. Когда браузер получает ответ с таким заголовком, то последующие свои
запросы этой страницы он делает с заголовком If-Modified-Since
— изменилась страница после даты
Last-Modified
? И если страница не изменилась, то сервер вместо страницы отдает код
304 Not Modified
, а браузер берет страницу из локального кеша.
Код 304 сервер отдает на третий хит: на первом создаётся композитный кеш, на втором передаётся время изменения, а
третий запрос страницы идет с заголовком If-Modified-Since
, на который сервер отвечает
304 Not Modified
.