nginxexpires
指令设置 2 个标头,Expires
并且Cache-Control
:
配置:
expires 1d;
标题:
Expires: Tue, 24 Nov 2020 12:51:31 GMT
Cache-Control: max-age=86400
我想保留Expires
标题但也设置Cache-Control
为public, max-age=86400, immutable
. 但这会产生双Cache-Control
标题:
配置:
expires 1d;
add_header Cache-Control "public, max-age=86400, immutable"
标题:
Expires: Tue, 24 Nov 2020 12:57:53 GMT
Cache-Control: max-age=86400
Cache-Control: public, max-age=86400, immutable
我不能只使用add_header Expires ...
,因为它需要将来的确切时间,而不仅仅是秒数。
我尝试使用more_set_headers
ngx_headers_more模块,但指令Cache-Control
设置的标头expires
仍然存在。
有没有办法将正确的Expires
标题与Cache-Control
set to结合起来immutable
?
标题的重复
Cache-Control
并不违反任何 W3C 标准。根据RFC 2616:此外,nginx 意识到这一点,尝试使用 nginx 指令设置一个不应包含多个值的
add_header
标头将导致覆盖该标头值而不是添加第二个值。这样您就可以安全地呆在配置。
Cache-Control: 标头可以出现多次,前提是这两个标头不尝试使用相同的指令。如果他们这样做,该指令将被忽略。(RFC 7234 § 4.2.1)
因此,您可以让 nginx 使用指令发送其标头
max-age
,并仅使用其他指令发送您自己的标头。结果将是:
(但如果
max-age=86400
出现在两个标题中,它将被忽略。)某些标头字段可能会出现多次,这是正常的,并且可以预料。RFC 7230 § 3.2.1 指定收件人可以将它们组合成一个单独的标头,但这不是必需的。