首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >惰性HTTP缓存

惰性HTTP缓存
EN

Stack Overflow用户
提问于 2011-02-06 01:33:34
回答 1查看 377关注 0票数 2

我有一个网站,这是通过一个信息亭显示给游客。人们可以与之互动。然而,由于网站不是本地托管的,并且使用互联网连接-页面加载速度很慢。

我想实现某种懒惰的缓存机制,这样当人们浏览页面时-页面和页面引用的资源都会被缓存,以便相同页面的后续加载是即时的。

我考虑过使用HTML5离线缓存-但它需要我在清单文件中指定所有资源,这对我来说是不可行的,因为网站太大了。

有没有其他方法来实现这一点?也许使用HTTP缓存头?我还需要一些方法来在某个时候使缓存无效,以便将新的更改“推”到浏览器中……

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-06 02:58:31

处理此类问题的常用方法是使用HTTP缓存头,并结合智能构造页面所引用资源的URL。

一般的想法是这样的:页面加载的每个资源(图像、脚本、CSS文件等)应该有一个唯一的、版本化的URL。例如,您可以加载/images/button_v123.png,而不是加载/images/button.png,当您更改该文件时,它的URL将更改为/images/button_v124.png。通常,这是通过在静态文件URL上重写URL来处理的,因此,例如,web服务器知道/images/button_v124.png实际上应该从web服务器的文件系统加载/images/button.png文件。可以通过附加内部版本号、使用文件内容的CRC或许多其他方式来创建版本号。

然后,您需要确保,在父页面中构造URL的任何地方,它们都引用版本化的URL。这显然需要用于构造所有text/html的动态代码,这可以通过调整用于生成页面的代码或通过影响所有URL请求的服务器范围的插件来实现。

然后,为所有资源请求(图像、脚本、Expires文件等)设置CSS头。至遥远的未来日期(例如,从现在起10年后)。这将有效地永久缓存它们。这意味着您的每个页面加载的所有请求都将始终从缓存中获取;缓存失效永远不会发生,这是正常的,因为当底层资源发生更改时,父页面将使用新的URL来查找它。

最后,你需要弄清楚你想如何缓存你的“父”页面。你如何做到这一点是一个判断的电话。您可以使用ETag/If-None-Match headers每次检查页面的新版本,如果服务器报告页面没有更改,这将非常快速地从缓存加载页面。或者,在检查服务器之前,可以使用Expires (和/或Max-Age)从缓存中重新加载父页面一段时间。

如果您想做一些更复杂的事情,您可以随时在kiosk上放置一个自定义代理服务器--在这种情况下,您可以完全、集中地控制如何进行缓存。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4908395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档