.htaccess 合并s-maxage和max age
我目前在我的htaccess中有这个.htaccess 合并s-maxage和max age,.htaccess,mod-rewrite,mod-expires,.htaccess,Mod Rewrite,Mod Expires,我目前在我的htaccess中有这个 <IfModule mod_headers.c> Header set Cache-Control 's-maxage=604800' </IfModule> <IfModule mod_expires.c> ExpiresActive On ExpiresByType text/html A86400 </IfModule> 如何合并s-maxage和max age,使其显示为: Cache-C
<IfModule mod_headers.c>
Header set Cache-Control 's-maxage=604800'
</IfModule>
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType text/html A86400
</IfModule>
如何合并s-maxage和max age,使其显示为:
Cache-Control: max-age=86400, s-maxage=604800
我尝试过使用标题集、附加、合并和添加,但没有任何效果。ExpiresActive On似乎会自动将缓存控制:最大保留时间包含在标头中。根据,排序很重要。尝试对这两条指令重新排序,并使用merge
防止重复:
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType text/html A86400
</IfModule>
<IfModule mod_headers.c>
Header merge Cache-Control 's-maxage=604800'
</IfModule>
过期于
ExpiresByType文本/html A86400
标头合并缓存控件“s-maxage=604800”
如果使用标题编辑
可以根据最大年龄标题添加s-maxage标题:
ExpiresByType text/html A86400
ExpiresByType text/xml A86401
Header edit Cache-Control ^(max-age=86400)$ "$1; s-maxage=604800"
结果:s-maxage只针对text/html添加了。简单的回答是,可能没有一种简单的方法可以连接两个标题,但实际上并不重要。从语义上讲,这两种形式之间没有区别:
Cache-Control: s-maxage=604800
Cache-Control: max-age=86400
Cache-Control: s-maxage=604800, max-age=86400
此表格:
Cache-Control: s-maxage=604800
Cache-Control: max-age=86400
Cache-Control: s-maxage=604800, max-age=86400
将缓存控制
标题字段值定义为以特定形式定义的指令列表:
该表单受以下HTTP规则的约束:
当且仅当消息头字段的整个字段值定义为逗号分隔列表时,消息中可能存在具有相同字段名的多个消息头字段[即,#(值)
]。必须能够将多个标题字段合并为一个“字段名称:字段值”对,而不改变消息的语义,方法是将每个后续字段值附加到第一个字段值,每个字段值用逗号分隔。因此,具有相同字段名的标题字段的接收顺序对于组合字段值的解释非常重要,因此,在转发消息时,代理不得更改这些字段值的顺序
(请注意,#(值)
语法在中定义)
因此,如果客户机以不同的方式对待这两种变体,则违反了HTTP/1.1
事实上,您看到的两个头很可能是作为一个单独的连体头行发送到客户机的,但是您的查看器或输出将指令分成两部分显示。遵循了您的建议,但仍然是一样的,只是它在下一行首先显示s-maxage,然后是max-age。它在Apache/2.4.4上对我有效-您运行的是哪个版本的Apache?你确定你的浏览器没有缓存响应吗?哦,我的服务器正在运行LiteSpeed Enterprise。。。我从我的谷歌网站管理员帐户中使用“Fetch as Google”来检查标题。根据这一点,你的htaccess中不能有
IfModule
指令-你必须阅读他们的文档或询问他们的支持团队。你可以使用他们的开发工具在Chrome或Firefox中检查标题:点击F12打开开发工具,单击网络选项卡并刷新,然后可以单击请求以查看标题。