Как добавить заголовок Expires
или Cache-Control
в JSP? Я хочу добавить дату истечения далекого будущего на странице включения моих статических компонентов, таких как изображения, CSS и файлы JavaScript.Добавить заголовок Expires или Cache-Control в JSP
ответ
Чтобы отключить кэш браузера для страниц JSP, создать Filter
, который отображается на url-pattern
из *.jsp
и делает в основном следующие в методе 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.
Таким образом, вы не нужны чтобы скопировать эту информацию поверх всех страниц JSP и загромождать их с помощью скриптлетов.
Чтобы включить кэш браузера для статических компонентов, таких как CSS и JS, поместите их в общую папку, как /static
или /resources
и создать Filter
, который отображается на url-pattern
из /static/*
или /resources/*
и делает в основном следующие в методе doFilter()
:
httpResponse.setDateHeader("Expires", System.currentTimeMillis() + 604800000L); // 1 week in future.
Смотрите также:
<%
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
%>
ОП говорит, что ему нужна страница, которая истекает в далеком будущем, но этот ответ дает ему противоположное. –
Servlet контейнеров, как Tomcat поставляются с набором предустановленных фильтров. См. Например, Expires Filter. Может быть проще использовать существующий, чем создать собственный подобный фильтр.
<%
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
%>
Должны использоваться как «Cache-Control», так и «Pragma» или только один, зависящий от контейнера сервлетов? –
OP говорит, что ему нужна страница, которая истекает в далеком будущем, но этот ответ дает ему обратное. –
+ ∞ если бы я мог для вашего сообщения в блоге. Это спасло меня. МНОГИЕ. ЧАСЫ. –
@Bears: Добро пожаловать :) – BalusC
спасибо, это мне очень помогло. Но разве нет ошибки на второй линии? Имхо это должно быть: httpResponse.setHeader («Cache-Control», «no-cache, no-store, must-revalidate»); – Christian