我目前在我的htaccess中有这个。
<IfModule mod_headers.c>
Header set Cache-Control 's-maxage=604800'
</IfModule>
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType text/html A86400
</IfModule>
HTTP标头将显示为...
Cache-Control: s-maxage=604800
Cache-Control: max-age=86400
Expires: Wed, 18 Dec 2013 03:51:18 GMT
如何合并s-maxage和max-age,使其显示为:
Cache-Control: max-age=86400, s-maxage=604800
我尝试过使用Header设置,追加,合并和添加,但没有任何效果。似乎ExpiresActive On将自动包含Cache-Control:max-age到标题。
答案 0 :(得分:1)
根据manual,订购很重要。尝试重新排序这两个指令并使用merge
来防止任何重复:
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType text/html A86400
</IfModule>
<IfModule mod_headers.c>
Header merge Cache-Control 's-maxage=604800'
</IfModule>
答案 1 :(得分:0)
如果您使用Header edit
,则可以根据max-age标头添加s-maxage标头:
ExpiresByType text/html A86400
ExpiresByType text/xml A86401
Header edit Cache-Control ^(max-age=86400)$ "$1; s-maxage=604800"
结果:仅针对text / html添加s-maxage
答案 2 :(得分:0)
简单的答案是,可能没有一种简单的方法来连接两个标头,但这实际上并不重要。在语义上,这种形式没有区别:
Cache-Control: s-maxage=604800
Cache-Control: max-age=86400
和这种形式:
Cache-Control: s-maxage=604800, max-age=86400
RFC 7234 § 5.2将Cache-Control
头字段值定义为以特定形式定义的指令列表:
Cache-Control = 1#cache-directive cache-directive = token [ "=" ( token / quoted-string ) ]
该表单受RFC 2616 § 4.2的HTTP规则的约束:
当且仅当该报头字段的整个字段值都定义为逗号分隔的列表[即
#(values)
]时,消息中才会存在多个具有相同字段名的消息报头字段。通过将每个后续字段值附加到第一个字段(每个字段用逗号分隔),必须能够将多个头字段组合成一个“字段名称:字段值”对,而无需更改消息的语义。因此,具有相同字段名称的报头字段的接收顺序对于组合字段值的解释很重要,因此代理在转发消息时不得更改这些字段值的顺序。
(请注意,#(values)
语法是在§ 2.1中定义的)
因此,如果客户端对这两个品种的区别对待,则违反了HTTP / 1.1。
实际上,您看到的是两个标头,实际上是作为单个联合标头行发送到客户端的,但是您的查看器或输出会将指令拆分为两个以显示。
>