php - Laravel 4 应用程序中的浏览器缓存问题

标签 php caching laravel laravel-4 browser-cache

我遇到了浏览器缓存干扰我的 Laravel 应用程序的问题。

如果禁用浏览器缓存,则一切正常。但是,如果启用,并且重复单击相同的链接,则甚至不会执行创建 View 或收集数据的 Laravel 方法。

影响是多方面的。例如,用于编辑资源的表单或显示数据的网格(使用 ajax 从服务器加载)在浏览器重新加载之前不会显示当前值。

我在我的一些方法中加入了一行记录当前时间戳来证明这一点。

public function index()
{
    Log::info( microtime() );

    return View::make( $this->templates_root . 'index' );
}

当重复单击链接或再次访问 View 时,日志中不会出现任何行。但如果我重新加载浏览器,它就会起作用。

如何防止浏览器缓存我的 View ?

最佳答案

编辑:

惊喜,惊喜 - 以前的解决方案在 IE 中不起作用。

又花了几个小时后,我最终将以下内容添加到 blade 模板 header 中:

<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 调用。 This question提供了一些非常有用的答案。

以下在 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');
});

似乎强制浏览器从服务器重新加载页面。

this question 的答案提供了一些非常有用的信息。

但是,我仍然想知道为什么其他开发人员没有遇到同样的问题,或者如果有,他们是如何解决的。

关于php - Laravel 4 应用程序中的浏览器缓存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19012698/

相关文章:

c# - Microsoft Enterprise Library 缓存应用程序 block 不是线程安全的?

php - 基于 laravel 中的附加数据透视表列进行查询

php - sql-Mysql : Left join on multiple rows and retrieve 1 row

php - 使用 fsockopen 重写一些代码以使用 curl 代替

php - AJAX jQuery PHP 返回值

php - 找到最近的主要城市

google-app-engine - GWT 生成的 HTML 文件太大

asp.net - 使用 Http Response.Disable KernelCache

php - Laravel Eloquent ORM 查询关系内的关系

php - 即使条件为 false,其他部分也不会执行 Laravel 5.2