1
16
最好的解决方案似乎是通过添加上次修改的时间来对文件名进行版本设置。 您可以这样做:向Apache配置添加重写规则,如下所示:
这会将任何“版本化”的URL重定向到“正常”的URL。这样做的目的是保持文件名不变,但从缓存中获益。对于一些不缓存带有参数的URL的代理,将参数附加到URL的解决方案将不是最优的。
versionFile()如下所示:
就这样!浏览器会要求image.123456789.png,Apache会将其重定向到image.png,因此您在任何情况下都会受益于缓存,不会有任何过时的问题,同时不必麻烦文件名版本控制。 http://particletree.com/notebook/automatically-version-your-css-and-javascript-files/ |
2
9
为什么不添加一个querystring“version”编号并每次更新版本? foo.js->foo.js?版本=5
|
3
6
重命名您的资源是一种方法,尽管我们使用内部版本号并将其嵌入到文件名中,而不是MD5哈希
因为这意味着您的所有资源都可以以确定性的方式重命名并在运行时解析。
|
4
3
我们遵循与PJP类似的模式,使用Rails和Nginx。 我们希望用户的头像图像被浏览器缓存,但当头像发生变化时,我们需要缓存尽快失效。
在代码中使用化身的所有地方,我们都引用了这个方法而不是URL。在Nginx配置中,我们添加了以下重写:
这意味着如果一个文件改变了,它在HTML中的URL也会改变,因此用户的浏览器会对该文件发出一个新的请求。当请求到达Nginx时,它被重写为文件的简单名称。 |
5
3
我建议在这种情况下使用etag缓存,请参见 http://en.wikipedia.org/wiki/HTTP_ETag . 然后可以使用hash作为etag。仍将为每个资源提交请求,但浏览器将仅下载自上次下载以来已更改的项目。 阅读您的web服务器/平台文档,了解如何正确使用etag,大多数体面的平台都有内置的支持。 |
6
2
大多数现代浏览器在HTTP请求中有可缓存资源时都会检查if-modified-since头。但是,并非所有浏览器都支持if-modified-since头。
方案1
创建版本为#的查询字符串。
方案2
为文件创建命名系统
方案3 也许是最优雅的解决方案,只需设置缓存头:服务器中的last-modified和expires。这样做的主要缺点是用户可能不得不重新缓存资源,因为这些资源已过期但从未更改。此外,当从多个服务器提供内容时,最后修改的头不能很好地工作。 下面是一些要查看的资源: Yahoo Google AskApache.com |
7
2
|
8
1
我也一直在考虑这个网站,我支持它将是一个大的工作,改变所有的参考。我有两个想法: 设置远程缓存过期标头,并将建议的更改应用于最常下载的文件。对于其他文件,设置头文件,使其在很短的时间(如10分钟)后过期。然后,如果在更新应用程序时有10分钟的停机时间,那么当用户访问该站点时,缓存将被刷新。一般的网站导航应该改进,因为文件将只需要下载每10分钟,而不是每次点击。 2 每次将应用程序的新版本部署到包含版本号的不同上下文时。如。www.site.com/app_2_6_0/ 我真的不确定这一点,因为用户的书签将打破每次更新。 |
9
1
我认为多种解决方案的结合最有效:
|
11
1
根据 http://httpd.apache.org/docs/2.0/mod/core.html#fileetag 只需在(/etc/apache2/apache2.conf)中启用它
&
这样,你就可以简单地引用你的图片
|
tincho87 · 避免Javascript/Css缓存 6 年前 |
Zac · 如何强制客户端重新下载我的网站? 6 年前 |
Kumar · bitbake清理使用只读NFS SSTATE缓存失败 6 年前 |
Chris Williams · 休眠/JPA缓存查找值 6 年前 |
Nymeria · 仅绑定到当前事务的Spring缓存 6 年前 |