Intereting Posts

Проблемы с кешем браузера в приложении Laravel 4

У меня проблема с кешем браузера, мешающим моему приложению Laravel.

Если кеш браузера отключен, все работает нормально. Однако, если включено, и одна и та же ссылка нажимается повторно, метод Laravel для создания представления или сбора данных даже не выполняется.

Последствия многообразны. Например, форма для редактирования ресурса или сетки, которая отображает данные (загруженные из сервера с использованием ajax), не отображает текущие значения до перезагрузки браузера.

Я поместил строку в некоторые из моих методов, которые регистрируют текущую временную метку, чтобы доказать это.

public function index() { Log::info( microtime() ); return View::make( $this->templates_root . 'index' ); } 

В журнале не появляется строка, когда клика повторяется повторно или снова открывается доступ. Но это произойдет, если я перезагружу браузер.

Что я могу сделать, чтобы браузер не кэшировал мои представления?

Related of "Проблемы с кешем браузера в приложении Laravel 4"

РЕДАКТИРОВАТЬ:

Сюрприз, удивление – предыдущее решение не работало в 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'); }); 

похоже, заставляет браузер перезагружать страницу с сервера.

Ответы на этот вопрос предоставили очень полезную информацию.

Тем не менее, мне все еще интересно, почему у других разработчиков нет такой же проблемы или, если они есть, как они ее разрешают.