Nuevo en Symfony 3.4: Respuestas HTTP inmutables

Algunos de los mecanismos tradicionales de la caché HTTP se basan en que el navegador envíe peticiones HTTP al servidor preguntando si un determinado recurso ha cambiado desde que se descargó la primera vez. Si no ha cambiado, el servidor envía una respuesta HTTP vacía con el código de estado 304 (Not Modified) y el navegador sabe que puede reutilizarlo sin tener que descargarlo otra vez.

No obstante, en las aplicaciones web modernas es común tener recursos que nunca jamás cambian. Por ejemplo, si usas Webpack Encore para gestionar los assets puedes activar el versionado para que las URL de los assets incluyan un hash que cambia cada vez que el contenido del archivo cambia (e.j. app.1234abc.css en vez de app.css). En estos casos, es completamente seguro reutilizar los assets y no preguntar nunca al servidor porque no van a cambiar (si cambian, la URL es diferente y por tanto, ya no es el mismo asset).

Esta técnica ya se utiliza en muchos servicios populares, como por ejemplo Facebook. En su caso, se produjo una reducción del 60% en las peticiones HTTP que sirven los contenidos estáticos, mejorando increíblemente el tiempo de carga de las páginas. En septiembre de 2017, el IETF estandarizó esta técnica mediante el RFC 8246 y Symfony 3.4 incluirá soporte para ella.

En la práctica, las respuestas HTTP inmutables se crean mediante la cabecera Cache-Control: immutable, que se puede combinar con otras opciones de caché (e.j. Cache-Control: max-age=31536000, immutable hace que la respuesta sea inmutable por 1 año). En Symfony 3.4 esta cabecera se controla mediante los nuevos métodos setImmutable(boolean $isImmutable) y isImmutable() de la clase Response. Si defines varias opciones de caché a la vez mediante el método setCache(), utiliza la opción booleana immutable.

Esta funcionalidad fue contribuida por Jaroslav Kuba en el pull request #22932.

Fuente: New in Symfony 3.4: HTTP Immutable Responses

Comentarios

Publicada el

19 de septiembre de 2017

Etiquetas

Proyectos Symfony destacados

La forma más sencilla de generar el backend de tus aplicaciones Symfony. Ver más

Síguenos en @symfony_es para acceder a las últimas noticias.