Access-Control-Max-Age与Cache-Control

Rad*_*erz 9 http-headers

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

Access-Control-Max-Age:1728000
Cache-Control:max-age=21600, public
Run Code Online (Sandbox Code Playgroud)

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

如果他们这样做既出现在HTTP头中,但包含不同的值,这将是有效的?

Sto*_*ica 22

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

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

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

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

换句话说,这些价值观涉及不同事物的新鲜感. Cache-Controlmax-age=是下载的资源, Access-Control-Max-Age是其他标头字段的内容.

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

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

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

由于这些标头不相关,因此这是有效的.但是,Access-Control-Max-Age: 1728000您的示例中的值有点奇怪,因为浏览器通常将此限制为更小的值(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-年龄