L'une des contraintes les plus complexes à résoudre lorsqu'on développe une application web consiste à ne pas générer deux fois la même page. Pour y parvenir, la plupart des développeurs ont recours à des solutions de cache propriétaires qui montrent rapidement leurs limites lorsqu'il s'agit de cacher des pages très dynamiques. Un article et ses commentaires, accompagnés d'un flux Twitter actif par exemple. Heureusement, le protocole HTTP offre depuis très longtemps des outils adaptés pour contrôler la mise en cache côté navigateur. Au cours de cet atelier, nous étudierons tout d'abord les modèles fondamentaux du cache HTTP côté client grâce à l'expiration et la validation. Enfin, nous découvrirons comment améliorer les performances tout en restant le plus dynamique possible grâce aux Edge Side Includes, ESI, et les reverse proxy caches tels que Varnish.
3. Au menu de cet atelier
1. Introduction
2. Avantages
3. Expiration (Expires & Cache-Control)
4. Validation (Etag & Last-Modi ed)
5. Reverse Proxy Cache
6. Edge Side Includes
4. Introduction au Cache HTTP
§ Mai 1996 – RFC1945 (HTTP 1.0)
§ Mars 1999 – RFC2616 (HTTP 1.1)
http://www.ietf.org/rfc/rfc2616.txt
http://tools.ietf.org/wg/httpbis/
5. Pourquoi cacher ?
§ Ne pas générer la même réponse deux fois
§ Diminuer la charge sur le serveur web
§ Diminuer la bande passante
§ Diminuer les temps de chargement
§ Servir plus de monde avec moins de serveurs
§ Améliorer l’expérience utilisateur
6. Objectifs ?
Etre le plus dynamique et le
plus performant en sollicitant
l’application le moins
possible.
7. Types de caches
Browser Cache
Browser
Gateway Cache
Proxy Cache
Web Server
Browser Cache
Browser
Client-Side Caching Server-Side Caching
8. Quels sont les contenus cachables ?
Seules les réponses à des requêtes GET et
HEAD peuvent être cachées car elles ne
changent pas l’état de la ressource.
Les requêtes POST, PUT et DELETE ne sont
pas cachables !
10. Expiration
Détermine la durée pendant laquelle une
réponse doit être considérée « fraîche » par le
cache. Au delà de cette période, la ressource
est considérée comme « périmée ».
Avantages : soulager la charge du serveur web
16. Validation
Détermine si une ressource a changé depuis
la dernière demande du client en marquant
cette dernière à l’aide d’un identi ant ou
d’un tampon.
Avantages : diminuer le tra c sur le réseau
28. Reverse Proxy Cache
Un reverse proxy cache siège devant le
serveur web, intercepte les requêtes
entrantes et retourne les réponses fraîches
de son cache.
31. Con guration de Varnish
# Make Varnish listen to port 80
backend default {
.host = "127.0.0.1";
.port = "80";
}
# Add ESI support header to all incoming requests
sub vcl_recv {
set req.http.Surrogate-Capability = "abc=ESI/1.0";
}
# Remove Surrogate-Control header from response headers
# And parse the response for ESI
sub vcl_fetch {
if (beresp.http.Surrogate-Control ~ "ESI/1.0") {
unset beresp.http.Surrogate-Control;
set beresp.do_esi = true;
}
}
38. Edge Side Includes
http://paris-web.local/index.php
http://paris-web.local/index.php
1 2
Lorem ipsum dolor sit
Reverse Proxy Cache
amet, consectetur
<esi:include >
adipiscing elit. Praesent eu
Serveur Web
odio eget eros vehicula
pulvinar id sed turpis.
Client
Vivamus a velit quam,
Lorem ipsum dolor sit Lorem ipsum auctor euismod tortor.
amet, consectetur dolor sit amet,
adipiscing elit. Praesent eu consectetur
odio eget eros vehicula adipiscing elit http://paris-web.local/sidebar.html
pulvinar id sed turpis. 3
Vivamus a velit quam,
auctor euismod tortor. Lorem ipsum
dolor sit amet,
consectetur
4 adipiscing elit