2016-11-21 23 views
3

访问控制最大年龄与缓存控制在http响应头中有什么区别?访问控制最大年龄与缓存控制

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

我觉得他们不是指同一件事情,因为他们经常出现在一起,有时会出现不同的值。

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

回答

8

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

这些头在不同的环境和不同的目的而使用:

  • Cache-Control在很宽的一般上下文中使用指定的时间,资源将被视为新的最高金额。

  • Access-Control-Max-Age用于CORS preflight requests。它指示可以缓存预检请求结果的时间长度。这种情况下的结果是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秒)限制此项,而在10分钟(600秒)时限制Chromium)。 Chromium还指定了5秒的默认值。

附录由@Filippos

还要注意,访问控制,最大年龄只能用(有意义)的预检要求,雇用HTTP OPTIONS。同时,HTTP规范(RFC 7231)不允许在HTTP OPTIONS请求中进行缓存(“对OPTIONS方法的响应不可缓存”),所以实质上,对于HTTP OPTIONS,只剩下Access-Control-Max-年龄

+0

这很有意义,示例域中可能存在一些跨域资源,但Access-Control标头在每个http响应中都显示(不正确),而不是所讨论的资源。由于我不希望访问控制标题出现在标准的非共享资源上,因此脱离了上下文。感谢您的洞察! – Radderz

+0

另请注意,Access-Control-Max-Age只能在使用HTTP OPTIONS的预检请求中使用(有意义)。同时,HTTP规范(RFC 7231)不允许在HTTP OPTIONS请求中进行缓存(“对OPTIONS方法的响应不可缓存”),所以实质上,对于HTTP OPTIONS,只剩下Access-Control-Max-年龄。 – Filippos

+0

好点,谢谢@菲利波斯 – janos