Caching 惰性HTTP缓存

Caching 惰性HTTP缓存,caching,html,http-caching,Caching,Html,Http Caching,我有一个网站,是通过一个信息亭显示给游客。人们可以与之互动。但是,由于该网站不是本地托管的,并且使用internet连接,因此页面加载速度很慢 我想实现某种延迟缓存机制,例如,当人们浏览页面时,页面和页面引用的资源会被缓存,以便相同页面的后续加载是即时的 我考虑过使用HTML5离线缓存——但它要求我指定清单文件中的所有资源,这对我来说是不可行的,因为网站相当大 有没有其他方法来实现这一点?也许使用HTTP缓存头?我还需要一些方法在某个时候使缓存失效,以便将新的更改“推送”到浏览器 处理此类问题的

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

我想实现某种延迟缓存机制,例如,当人们浏览页面时,页面和页面引用的资源会被缓存,以便相同页面的后续加载是即时的

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


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

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

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

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

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

最后,您需要弄清楚如何缓存“父”页面。你如何做到这一点是一个判断判断。您每次都可以使用HTTP头检查页面的新版本,如果服务器报告页面没有更改,这将很快从缓存加载页面。或者,在检查服务器之前,您可以使用
Expires
(和/或
Max Age
)从缓存中重新加载父页面一段给定的时间


如果你想做一些更复杂的事情,你可以在kiosk上安装一个定制的代理服务器——在这种情况下,你可以完全集中地控制缓存是如何完成的

您好,您如何看待向资源添加“版本查询参数”的方法?因此,您的应用程序中有一个小的非缓存资源,该资源将返回应用程序的版本,对于每个url,您将添加版本(例如:/images/button?version=v124)。这种方法的好处是应用程序服务器端的可维护性。只要服务器对这种方法满意(其中“OK”表示返回的图像有错误),那么查询字符串可能就可以了。很多年前,我记得听说AOL和其他低端ISP有一个强大的代理服务器,它可能不会用不同的查询字符串缓存图像,但希望他们已经停止这样做了。