Edge Side Includes
# Edge Side Includes

Edge Side Includes ou ESI est un langage de balisage pour l'assemblage de pages web dynamiques. Le but de la norme ESI est de faciliter l'extensibilité des architectures web.

Les sites web présentent souvent des contenus générés automatiquement, par opposition à de simples fichiers html statiques. Cela est nécessaire pour restituer correctement des contenus changeants tels que des catalogues ou les messages d'un forum, ou encore pour afficher des contenus personnalisés à un utilisateur identifié. Cet aspect dynamique rend plus difficile la mise en place de caches web.

Pour surmonter cette difficulté, un groupe d'entreprise constitué de Akamai Technologies, Art Technology Group, BEA Systems, Circadence Corporation, Digital Island, Interwoven, Open Market (FatWire), Oracle Corporation et Vignette Corporation a conçu et soumis la spécification ESI au consortium W3C pour approbation.

La spécification 1.0 du langage ESI a été soumise en août 2001. Le W3C ne l'a toutefois pas approuvée.

ESI est implémentée par certains CDN (Content Delivery Networks) comme Akamai, et par des proxys comme Varnish, Squid et Mongrel ESI. Ils ne couvrent pas la spécification complète.

## Fonctionnement

Les balises ESI sont insérées dans le code HTML (ou autre format textuel) lors de la conception. Celles-ci, au lieu d'être envoyées au navigateur client, sont interprétées (à la manière de directives de préprocesseurs) et déclenchent des traitements de construction (assemblage) de la page.

Par exemple, la balise include permet d'insérer du contenu extérieur. Son utilisation au sein du document HTML est de la forme :

Le processeur ESI récupère alors le document à l'adresse donnée dans l'attribut src. S'il échoue, il utilise l'attribut alt. S'il échoue à nouveau, alors il ne fait rien. Le système ESI utilisé peut être un serveur de cache et disposer d'une copie locale des documents nécessaires. À l'inverse, la page HTML elle-même peut être présente en cache, et le système procède alors uniquement à l'inclusion des ressources ESI distantes nécessaires. Comme on le voit, différentes stratégies de mise en cache sont envisageables.

## Fonctionnalités

Les quatre fonctions principales de ESI sont :

* inclusion de fragments de pages ;
* variables pouvant provenir de cookies ou de headers HTTP, puis affichées ou utilisées dans des expressions ESI ;
* conditions pour que le balisage tire parti des variables (exemple : selon la valeur d'un cookie) ;
* gestion d'erreur, pour qu'un basculement puisse avoir lieu en cas de panne d'un serveur nominal.

## Alternatives

Les principales alternatives à ESI sont :

* l'assemblage des pages sur le serveur d'origine en utilisant les server side includes, ou d'autres types de langages serveur,
* ou dans le navigateur web avec le client side scripting et les techniques de type Ajax.
