nginxexpires指令设置 2 个标头,Expires并且Cache-Control:
配置:
expires 1d;
Run Code Online (Sandbox Code Playgroud)
标题:
Expires: Tue, 24 Nov 2020 12:51:31 GMT
Cache-Control: max-age=86400
Run Code Online (Sandbox Code Playgroud)
我想保留Expires标题,但也设置Cache-Control为public, max-age=86400, immutable. 但这会产生双Cache-Control标头:
配置:
expires 1d;
add_header Cache-Control "public, max-age=86400, immutable"
Run Code Online (Sandbox Code Playgroud)
标题:
Expires: Tue, 24 Nov 2020 12:57:53 GMT
Cache-Control: max-age=86400
Cache-Control: public, max-age=86400, immutable
Run Code Online (Sandbox Code Playgroud)
我不能只使用add_header Expires ...,因为它需要未来的确切时间,而不仅仅是秒数。
我尝试使用more_set_headersngx_headers_more模块,但指令Cache-Control设置的标头expires仍然存在。
有没有办法将正确的Expires标头与Cache-Controlset to结合起来immutable?
重复标Cache-Control头并不违反任何 W3C 标准。根据RFC 2616:
当且仅当该头字段的整个字段值被定义为逗号分隔列表[即#(values)]时,具有相同字段名称的多个消息头字段可以出现在消息中。通过将每个后续字段值附加到第一个字段值(每个字段值之间用逗号分隔),必须可以将多个标头字段组合成一个“字段名称:字段值”对,而不更改消息的语义。因此,具有相同字段名称的头字段的接收顺序对于组合字段值的解释很重要,因此当转发消息时,代理不得更改这些字段值的顺序。
此外,nginx 也意识到了这一点,尝试使用 nginx 指令设置一个不应包含多个值的标头add_header将导致覆盖该标头值,而不是添加第二个值。这样您就可以安全地呆在
expires 1d;
add_header Cache-Control "public, immutable";
Run Code Online (Sandbox Code Playgroud)
配置。
Cache-Control: 标头可以出现多次,前提是两个标头不尝试使用相同的指令。如果他们这样做,该指令将被忽略。(RFC 7234\xc2\xa7 4.2.1)
\n因此,您可以让 nginx 使用该指令发送其标头max-age,并仅使用其他指令发送您自己的标头。
结果将是:
\nExpires: Tue, 24 Nov 2020 12:57:53 GMT\nCache-Control: max-age=86400\nCache-Control: public, immutable\nRun Code Online (Sandbox Code Playgroud)\n(但如果max-age=86400出现在两个标题中,它将被忽略。)
某些标头字段可能会多次出现,这是正常现象,也是预料之中的。RFC 7230 \xc2\xa7 3.2.1 指定接收者可以将它们组合到单个标头中,但这不是必需的。
\n| 归档时间: |
|
| 查看次数: |
3280 次 |
| 最近记录: |