Как предотвратить кеширование в браузере с помощью Play? - PullRequest
9 голосов
/ 25 сентября 2011

Часть моего приложения предоставляет файл для загрузки с использованием метода redirect().Я обнаружил, что Chrome (а не Firefox или IE, как ни странно) кэширует этот файл, так что одна и та же версия загружается, даже если она изменилась на стороне сервера.Я понял, что есть способ сказать браузеру не кэшировать файл, например, как этот в HTML, или добавив что-то в заголовок HTTP.Я мог бы понять это в веб-структуре более низкого уровня, но я не знаю, как получить заголовок в Play !, и опция HTML не будет работать, потому что это не файл HTML.

Кажется, что в Play всегда есть умный и простой способ выполнять общие задачи! Так есть ли умный и простой способ предотвратить кэширование в контроллере?

Спасибо!

Редактировать:

Мэтт указывает мне на http.cacheControl настройку , которая контролирует кэширование для всего сайта.Хотя это будет работать, у меня нет проблем с кэшированием большей части сайта, особенно CSS и т. Д. Если возможно, я бы хотел контролировать кэширование для одного URL-адреса за раз (тот, который указывает на загружаемый файл в данном случае).Это не совсем сайт с высоким трафиком, так что это просто академический интерес.

В идеале я хотел бы сделать что-то вроде:

public static void downloadFile(String url) {
  response.setCaching(false);  // This is the method I'm looking for
  redirect(url);  // Send the response
}

Ответы [ 4 ]

10 голосов
/ 26 сентября 2011

Play framework response объект имеет метод setHeader.Вы можете добавить нужные заголовки, например:

response.setHeader("Cache-Control", "no-cache");
5 голосов
/ 25 сентября 2011

Я не проверял его, но похоже, что http.cacheControl параметр конфигурации может работать.

http.cacheControl

Управление заголовками HTTP-ответа для статических файлов: задает максимальный возраст по умолчанию в секундах, сообщая браузеру пользователя, как долго он должен кэшировать страницу. Это только для чтения в режиме prod, в режиме dev кэш отключен. Например, чтобы отправить no-cache:

http.cacheControl=0

По умолчанию: 3600 & ndash; установить срок действия кэша до одного часа.

2 голосов
/ 29 января 2016

Это действительно так:

response().setHeader("Cache-Control", "no-cache");
1 голос
/ 10 января 2017

Томми ответит хорошо, но чтобы убедиться, что он работает в любом браузере, используйте:

...