Access-Control-Max-Age与Cache-Control

时间:2016-11-21 23:43:06

标签: http-headers

http响应标头中的Access-Control-Max-Age和Cache-Control有什么区别?

Access-Control-Max-Age:1728000
Cache-Control:max-age=21600, public

我觉得他们没有提到同一件事,因为他们经常一起出现,有时候会有不同的价值观。

如果他们都出现在http标头中,但包含不同的值,那么这是否有效?

1 个答案:

答案 0 :(得分:15)

  

http响应标头中的Access-Control-Max-Age和Cache-Control有什么区别?

这些标题用于不同的上下文中,用于不同的目的:

  • Cache-Control用于广泛的一般上下文中,以指定资源被视为新鲜的最长时间。

  • Access-Control-Max-Age用于CORS preflight requests。它表示可以缓存预检请求的结果多长时间。这种情况下的结果是Access-Control-Allow-MethodsAccess-Control-Allow-Headers标题的内容。

换句话说,这些价值观涉及不同事物的新鲜感。 Cache-Control的{​​{1}}用于下载的资源, max-age=用于其他标题字段中的内容。

  

我觉得他们没有提到同一件事,因为他们经常一起出现,有时候会有不同的价值观。

如前所述,它们指的是完全不同的东西。 一起看他们可能只是巧合。 通常建议在适用时设置Access-Control-Max-Age的{​​{1}}。 设置Cache-Control似乎并不十分重要, 因为浏览器可能会设置合理的默认值。

  

如果它们都出现在http标头中,但包含不同的值,那么这是否有效?

由于这些标题不相关, 这是有效的。 但是,示例中的值max-age有点奇怪, 因为浏览器通常将此限制为更小的值 (Firefox在24小时(86400秒)和Chromium在10分钟(600秒)处上限。 Chromium还指定默认值5秒。

@Filippos附录:

  

另请注意,Access-Control-Max-Age只能在(使用HTTP OPTIONS)的预检请求中使用(有意义)。同时HTTP规范(RFC 7231)不允许HTTP OPTIONS请求中的缓存(“对OPTIONS方法的响应不可缓存”),因此从本质上讲,对于HTTP OPTIONS,您只能使用Access-Control-Max-年龄