apache - 如何使用apache设置静态资源缓存?

标签 apache caching fingerprinting

我想优化我们网站中使用的静态资源(.js、.css、...文件)的缓存。我的目标基于这篇文章 ( https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching#invalidating-and-updating-cached-responses )。

简而言之 - 因为这些静态 Assets 往往会临时更新(有时每周一次,有时每天两次,...),我想在遥远的 future 到期时缓存它们,并根据内容为它们提供唯一的名称或修改日期或类似信息。这应该允许将它们缓存很长时间,但一旦发生某些更改就更新它们。

Apache2 服务器支持此技术吗?或者是否有一些中间件系统可以处理指纹生成(具有唯一的 Assets 名称)并更新 HTML 文件中对它们的引用(根本不会被缓存)?

我们在主机上使用 LAMP 堆栈。

提前谢谢

最佳答案

有多种技术,其中一些技术比其他技术更好。一个好的配置是具有以下配置:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.+)\.(\d+)\.(bmp|css|cur|gif|ico|jpe?g|js|png|svgz?|webp|webmanifest)$ $1.$3 [L]
</IfModule>

这允许采用 /i/filename.1433499948.gif 形式的 URL - 但实际从磁盘读取的文件只是 /i/filename.gif 部分文件名的 1 和 3。

此 Apache vhost/.htaccess 节来自 H5BP filename-based_cache_busting.conf文件,存储库中还有其他良好实践示例。

那个,结合H5BP mod_expires配置,意味着您始终能够轻松地更新用户本地浏览器缓存,只需用新名称更新对文件的引用。

关于apache - 如何使用apache设置静态资源缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30646730/

相关文章:

javascript - 重写 Backbone 的 URL 函数以从本地存储中获取数据

web-services - 在 Musicbrainz 上搜索 AcoustID

javascript - 在使用 HTML5 文件 API 上传之前唯一标识文件

apache - mod_rewrite 帮助更改基于 URI 的内容处置

Angular - Prod Build 不生成唯一的哈希值

android - Android 上的 UI 元素之间是否共享图像资源?

javascript - 在这种情况下唯一识别用户的最佳方法是什么?

apache - Storm ui错误:org.apache.storm.utils.NimbusLeaderNotFoundException:从种子主机[localhost]中找不到领导者雨云

apache - centos 5.5如何设置定时启停httpd和mysql

apache - 如何让 map 服务器工作