У меня проблема с кешем браузера, мешающим моему приложению Laravel.
Если кеш браузера отключен, все работает нормально. Однако, если включено, и одна и та же ссылка нажимается повторно, метод Laravel для создания представления или сбора данных даже не выполняется.
Последствия многообразны. Например, форма для редактирования ресурса или сетки, которая отображает данные (загруженные из сервера с использованием ajax), не отображает текущие значения до перезагрузки браузера.
Я поместил строку в некоторые из моих методов, которые регистрируют текущую временную метку, чтобы доказать это.
public function index() { Log::info( microtime() ); return View::make( $this->templates_root . 'index' ); }
В журнале не появляется строка, когда клика повторяется повторно или снова открывается доступ. Но это произойдет, если я перезагружу браузер.
Что я могу сделать, чтобы браузер не кэшировал мои представления?
РЕДАКТИРОВАТЬ:
Сюрприз, удивление – предыдущее решение не работало в IE.
Проведя еще пару часов, я закончил добавление следующего в заголовок шаблона blade
сервера:
<meta http-equiv="cache-control" content="max-age=0" /> <meta http-equiv="cache-control" content="no-cache" /> <meta http-equiv="cache-control" content="no-store" /> <meta http-equiv="cache-control" content="must-revalidate" /> <meta http-equiv="expires" content="0" /> <meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" /> <meta http-equiv="pragma" content="no-cache" />
Кажется, это работает для всех браузеров.
Кроме того, мне пришлось предотвратить кеширование всех вызовов AJAX. Этот вопрос дал некоторые очень полезные ответы.
В IE не работает следующее:
Я нашел решение – не очень красивое, на мой взгляд.
Используя фильтр (глобальный после) следующим образом …
App::after(function($request, $response) { // prevent browser caching $response->headers->set('Cache-Control','nocache, no-store, max-age=0, must-revalidate'); $response->headers->set('Pragma','no-cache'); $response->headers->set('Expires','Fri, 01 Jan 1990 00:00:00 GMT'); });
похоже, заставляет браузер перезагружать страницу с сервера.
Ответы на этот вопрос предоставили очень полезную информацию.
Тем не менее, мне все еще интересно, почему у других разработчиков нет такой же проблемы или, если они есть, как они ее разрешают.