这个页面说明了这个:
如果响应包括Expires头和max-age指令,则max-age指令会覆盖Expires头,即使Expires头更具限制性
似乎mod_expires和mod_headers都在我的服务器中处于活动状态.
哪一个更可取,你能评论每个人的优势吗?
谢谢.
这个.htaccess文件:
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 4 month"
</IfModule>
<IfModule mod_headers.c>
Header merge X-ModHeaders "Yes, it is installed"
</IfModule>
Run Code Online (Sandbox Code Playgroud)
...在我的开发框(Windows框,Apache/2.4.10,PHP作为Apache模块运行)中按预期工作,其中“有效”意味着它为所有资源(静态或动态)生成适当的标头。
但是,在我的生产服务器(Linux 机器,Apache/2.2.31,PHP 作为 FastCGI 与 mod_fcgid/2.3.9 运行)中,它仅适用于静态资产,不适用于 PHP 脚本。
我怀疑差异来自 PHP SAPI 是否正确?有没有办法修复它,这样我就不需要复制生成 HTTP 标头的代码?
我只是在网上搜索,但找不到一个好的答案:
FF的Google页面速度扩展告诉我在我的网站上缓存文件(PHP).因此,我更新了我.htaccess(在我的网站测试版区域)以缓存某些类型的文件:
ExpiresActive On
ExpiresDefault A0
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
Header set Cache-Control "max-age=2592000, public"
</FilesMatch>
Run Code Online (Sandbox Code Playgroud)
在beta区域进行编码时,我注意到由于缓存控制设置,我需要按下F5以获取最新的.css文件.这对我来说并不坏......但用户呢?
因此,当我更新我的网站(或文件过期)时,我可以告诉浏览器重新下载所有文件(如果没有),并使用缓存吗?
如果我可以告诉浏览器,这将是完美的:"嘿,更新时间之前的所有文件都是旧的,请重新下载它们 - 但是更新时间之后的文件没问题,请使用缓存."
据我所知:
ExpiresByType text/html "access plus 30 days"
Run Code Online (Sandbox Code Playgroud)
在存储内容模具30天后,将使浏览器缓存请求新鲜内容.
但是:
ExpiresByType text/html "modification plus 30 days"
Run Code Online (Sandbox Code Playgroud)
浏览器缓存将在LAST MODIFIED HEADER的帮助下知道在修改30天之前不要求新鲜内容.
所以我的问题是,为什么不一直使用修改基础,因为它似乎更有意义,或者是否有我遗漏的东西?
我试图通过使用mod_expires将expire标题设置为访问text/html的2小时:
<IfModule mod_expires.c>
ExpiresActive on
ExpiresDefault "access plus 2 hours"
ExpiresByType text/html "access plus 2 hours"
</IfModule>
Run Code Online (Sandbox Code Playgroud)
但是当与PHP一起使用时:
session_start();
Run Code Online (Sandbox Code Playgroud)
Expires标头正在重置为:
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Run Code Online (Sandbox Code Playgroud)
任何想法如何避免被覆盖session_start()?
我想设置字体的有效期。以下定义无效apache 2.2.15。
ExpiresByType application/x-font-woff "access plus 1 month"
ExpiresByType application/font-woff2 "access plus 1 month"
Run Code Online (Sandbox Code Playgroud) 我想使用W3C验证程序来优化我的Wordpress博客。在主页上,它声称存在28个错误。例如,其中之一是以下内容:
第28行,第53列:省略了“元”的结束标记,但指定了OMITTAG NO
Run Code Online (Sandbox Code Playgroud)<meta name="DC.Creator" content="Raffael Herrmann">
所以我修复了它,然后单击revalidate。但是,验证者说,此错误仍然存在。但是,如果我从Web浏览器查看浏览器的源代码窗口,则可以看到更改成功交付。如果我在W3C验证器选项中选中“显示源代码”并重新加载我的网站,我可以看到验证器使用的来自我网站的源代码已过期/未更改。
因此,有人可以向我解释为什么W3C验证程序无法识别我的更改吗?如果你wan't看看自己- http://code-bude.net/是我的博客的网址。
尝试将ExpiresDefault ExpiresByType添加到我的网站上的内容,以便缓存它.我在Javascript,CSS和图像的URL(路径中的修订号)中使用cachebusting,这样我就可以将这些mimetypes设置为永久.我在apache httpd中设置了以下规则:
ExpiresActive On
ExpiresDefault "access plus 1 minutes"
ExpiresByType image/gif "access plus 10 years"
ExpiresByType image/png "access plus 10 years"
ExpiresByType image/jpeg "access plus 10 years"
ExpiresByType image/jpg "access plus 10 years"
ExpiresByType text/javascript "access plus 10 years"
ExpiresByType text/css "access plus 10 years"
Run Code Online (Sandbox Code Playgroud)
然后,当我访问我的网站http://karmerd.com并使用httplive标题来查看标题时,我得到了我认为应该是正确的exps for css:Expires:Sun,03 Feb 2019 17:52:48 GMT
但我使用雅虎的Yslow firebug扩展,它仍然给我一个不使用Expires的F!难道我做错了什么?我也在我的网站上使用gravatars,但他们有Expires设置.好像一切都过期了.是Yslow还是我?
mod-expires ×8
apache ×5
php ×3
.htaccess ×2
http-headers ×2
mod-headers ×2
caching ×1
mod-fcgid ×1
session ×1
w3c ×1
wordpress ×1
yslow ×1