Edge Side Includes или ESI - это небольшой язык разметки для сборки динамического веб-контента на уровне края. Целью ESI является решение проблемы масштабирования веб-инфраструктуры путем вставки тегов включения ESI непосредственно в кэшированные HTML-документы. Процессоры ESI анализируют документ для поддержки различных механизмов кэширования и синхронизируют разные части документа, что позволяет повысить персонализацию кэшированных страниц.

Веб-сайты довольно часто создают контент. Это могло быть из-за изменения контента, такого как каталоги или форумы, или из-за персонализации. Это создает проблему для систем кэширования. Для решения этой проблемы группа компаний (Akamai, Art Technology Group, BEA Systems, Circadence Corporation, Digital Island, Inc., Interwoven, Inc., Open Market, чьи технологии, связанные с ESI, теперь принадлежат FatWire Software, Oracle Corporation и Vignette Corporation) разработала спецификацию ESI и представила ее на утверждение W3C. Редактором предложения был Марк Ноттингем.

ESI Language Specification 1.0 была представлена ​​Консорциуму World Wide Web (W3C) для утверждения в августе 2001 года. W3C подтвердил получение, но не принял предложение.

ESI реализуется некоторыми сетями доставки контента, такими как Akamai, и некоторыми прокси-серверами кэширования, такими как Varnish, Squid и Mongrel ESI, хотя многие из них не реализуют полную спецификацию. Akamai также добавляет дополнительные функции к поддерживаемой версии.

Как реализован ESI

Теги элементов ESI вставляются в HTML или другое текстовое содержимое во время создания. Эти теги ESI не отображаются для зрителей, а являются директивами, которые предписывают процессору ESI предпринять определенные действия. Теги ESI на основе XML указывают агенту обработки на стороне края действие, которое необходимо предпринять для завершения сборки страницы. Одним из простых примеров элемента ESI является тег include, который используется для включения содержимого, внешнего по отношению к странице. Тег включения ESI, встроенный в HTML-документ, будет выглядеть следующим образом:

<esi:include src="http://example.com/1.html" alt="http://bak.example.com/2.html" onerror="continue"/>

В этом случае процессор ESI будет извлекать URL-адрес src, или если это не удается, альтернативный URL-адрес, или если это не удается, ничего не делать. Система ESI обычно представляет собой кэширующий прокси-сервер, поэтому он может иметь локальную копию этих файлов, которую он может вставлять, не возвращаясь на сервер. В качестве альтернативы можно кэшировать всю страницу с тегами ESI, и только запросы ESI могут быть отправлены на исходный сервер. Это позволяет разное время кеширования для разных частей страницы или различную степень персонализации.

особенности

В ESI есть четыре основных функции:

  • включение фрагментов страницы, как показано выше;
  • переменные, которые можно установить из файлов cookie или заголовков HTTP, а затем использовать в других инструкциях ESI или записать в разметку;
  • условия, позволяющие использовать разную разметку на основе переменных, например, установлен ли cookie или нет;
  • обработка ошибок, чтобы можно было использовать аварийное переключение, если исходный сервер недоступен.