2

每次我搜索时,我都会获得有关如何禁用浏览器缓存的信息。永远不要启用它。

如何让后退按钮使用缓存而不重新生成页面?

4

2 回答 2

2

据我所知,您可以通过以下元标记控制强制浏览器重新加载数据:

<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-control" content="no-cache">
<meta http-equiv="Expires" content="0">

但你不能强迫它从缓存中读取。如果您没有明确指定忽略缓存,浏览器本身会为您执行此操作,并且页面数据实际上已缓存且未过期。

这不依赖于 CodeIgniter,因为它是客户端,但您可能希望使用 CI 的html 助手中包含的 meta() 函数,该函数将简单地输出相应的元标记。例如:

echo meta('Cache-control', 'no-cache', 'http-equiv');

将生成上面的第二个代码行。

笔记:

  1. 第一个元标记是为 http/1.0 指定的,而第二个是为 http/1.1 指定的,但两者都用于允许向后兼容。

  2. 如果您使用的是 xhtml 而不是 html,请记住关闭元标记/>

于 2012-12-10T16:51:32.800 回答
2

浏览器缓存与 codeigniter 无关。您可以使用 html 元标记来专门指示浏览器不要缓存页面,或者您可以为单个页面设置缓存到期时间,如下所示:

<meta http-equiv="expires" content="Mon, 10 Dec 2001 00:00:00 GMT" />

您可以使用一些 php 将明天的日期放在那里。浏览器(取决于设置)通常会自动从缓存中提取尽可能多的内容,包括单击后退按钮时 - 后退按钮的缓存将与您从任何其他链接进入时一样工作。

您可以通过 htaccess 在 apache 服务器上使用类似以下内容设置过期标头(您必须询问如何在其他服务器类型上执行此操作),以告诉浏览器应该在给定的时间段内缓存某些类型的内容时间:

ExpiresByType text/html "access plus 60 seconds"

这将告诉浏览器将任何 mime 类型的 text/html 存储 60 秒(这包括 codeigniter 输出)但是如果您处理动态内容,请不要这样做它将停止加载任何动态页面内容并将停止对您的内容进行任何更改由回访者加载(显然,对于 60 秒的缓存,第二部分不是这样的问题)。

要意识到的关键是您的页面不是一回事,它由很多部分组成,其中一些部分应该从缓存中调用(js,css,图像等)有些不应该(通常html会落入此类别)。浏览器会自动从缓存中调用您页面中缓存未过期的所有部分。

通常您会使用 .htaccess(或类似方法)来缓存您的 css、图像等(使用文件名中的版本控制在它们更改时强制重新加载)。

您还应该利用服务器端缓存 - codeigniter 对整个页面执行此操作,但我不倾向于发现这对任何类型的动态站点都非常有用,因此如果您是 ci,我会看看使用 phil sturgeons 部分缓存库对 ss 缓存感兴趣:

https://github.com/philsturgeon/codeigniter-cache

这不会停止向服务器发送请求,但意味着该请求需要较少的处理,并且可以作为一个或多个静态内容提供。

于 2012-12-10T16:52:34.620 回答