java - Agregue un encabezado Expires o Cache-Control en JSP




http (5)

<%
    response.setHeader("Cache-Control", "no-cache"); //HTTP 1.1
    response.setHeader("Pragma", "no-cache"); //HTTP 1.0
    response.setDateHeader("Expires", 0); //prevents caching at the proxy server
%>

¿Cómo se agrega un encabezado Expires o Cache-Control en JSP? Deseo agregar una fecha de vencimiento de futuro lejano en una página de inclusión para mis componentes estáticos, como imágenes, CSS y archivos de JavaScript.


Para deshabilitar la memoria caché del navegador para páginas JSP, cree un Filter que esté mapeado en un url-pattern de *.jsp y haga básicamente lo siguiente en el método doFilter() :

HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1
httpResponse.setHeader("Pragma", "no-cache"); // HTTP 1.0
httpResponse.setDateHeader("Expires", 0); // Proxies.

De esta forma, no es necesario copiar esta información en todas las páginas JSP y aglutinarlas con scriptlets .

Para habilitar la memoria caché del navegador para componentes estáticos como CSS y JS, colóquelos en una carpeta común como /static o /resources y cree un Filter que esté mapeado en un url-pattern de /static/* o /resources/* y básicamente lo siguiente en el método doFilter() :

httpResponse.setDateHeader("Expires", System.currentTimeMillis() + 604800000L); // 1 week in future.

Ver también:


<%
    response.setHeader("Cache-Control", "no-cache");
    response.setDateHeader("Expires", 0);
%>

Los contenedores de servlets como Tomcat vienen con un conjunto de filtros predefinidos. Ver, por ejemplo, Expires Filter . Puede ser más fácil usar uno existente que crear su propio filtro similar.


RFC6648 recomienda que asuma que su encabezado personalizado "podría volverse estandarizado, público, comúnmente implementado o utilizable en múltiples implementaciones". Por lo tanto, recomienda no prefijarlo con "X-" o construcciones similares.

Sin embargo, hay una excepción "cuando es extremadamente improbable que [su encabezado] alguna vez se estandarice". Para dichos encabezados de "implementación específica y uso privado", el RFC indica que un espacio de nombres como un prefijo de proveedor está justificado.





java jsp http cache-control