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
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.