我正在研究使用大量图像,JS和CSS文件的Symfony2应用程序。
我希望浏览器积极地缓存这些内容,以便大多数页面加载不会重新请求这些资产。
默认设置似乎是浏览器不断重新检查它们以及服务器使用304 Not Modified进行响应。如何更改此设置以便它甚至不运行此请求? (我不介意它是否使用ETag或Expires或任何机制,只要大多数页面请求不对所有图像运行单独的请求。)
我已经搜索过很多关于如何执行此操作的详细信息 for pages 您的控制器中有一个$request
对象,您可以在其中设置各种属性。但是,我问的是如何执行 for assets (例如图片),这些不是由我的任何PHP代码返回。
答案 0 :(得分:5)
您必须在httpd.conf文件中添加它:
ExpiresActive On
ExpiresByType image/gif "access 1 month"
ExpiresByType image/jpg "access 1 month"
ExpiresByType image/jpeg "access 1 month"
ExpiresByType image/png "access 1 month"
ExpiresByType text/css "access 1 month"
ExpiresByType text/js "access 1 week"
ExpiresByType application/javascript "access 1 week"
必须激活模块'mod_expires'
另外,不要忘记在配置文件中添加asset_version(请参阅http://symfony.com/doc/current/reference/configuration/framework.html#ref-framework-assets-version),以便在更改某些资产时使缓存无效
答案 1 :(得分:0)
不适合您的网络服务器,但对于使用nginx + symfony的人来说,解决方案是:
#app/config/config.yml framework: # ... assets: version: 'v2'
其中'v2' - 是您的自定义资产版权名称。
server { ... location ~* ^.+\.(rss|atom|jpg|jpeg|gif|png|ico|rtf|js|css)$ { expires max; } ... }
现在您的所有资产都有最长的有效期。
如果您制作新版本并更改了一些.css和.js文件,只需编辑版本名称即可。从'v2'到'v3'。