CORS Access-Control-Max-Age被忽略

Rol*_*ütz 25 http access-control same-origin-policy http-headers cors

我在不同的域上托管WebApp及其API,并使用CORS来解决相同的源策略.到现在为止还挺好.这有效.

要仅在每个会话中发送一次CORS预检,我将Access-Control-Max-Age设置为20天,但这不起作用(在Chrome中测试):https: //db.tt/vfIW3fD2

我需要改变什么?

Nej*_*ian 69

如果您使用的是Chrome开发者工具,请确保未选中 "禁用缓存(当DevTools已打开时)" .我遇到了"Access-Control-Max-Age"的问题,只是意识到我已经选中了该选项.

  • 你绝对让我头疼不已!忘记检查之前:D (7认同)
  • 这太明显了,但是......我从来没有想过!谢谢! (2认同)

mon*_*sur 23

Chrome/Blink最大预检时间为10分钟(600秒).这是源代码中定义此位置的位置:

https://chromium.googlesource.com/chromium/blink/+/master/Source/core/loader/CrossOriginPreflightResultCache.cpp#40

任何超过10分钟的飞行前时间都将被忽略,而将使用10分钟.

不同的浏览器可能有不同的最大年龄政策 Safari/WebKit缓存最多5分钟,而Firefox缓存长达24小时.Chrome源代码表示存在最大值,以"最大限度地降低切换到安全网络后使用中毒缓存的风险".

如果代码无法解析max-age标头(或者服务器未指定max-age标头),则浏览器默认为5秒.

  • 2 年后,chrome 仍然忽略缓存:(...在 54.0.2840.50 beta(64 位)上测试 (2认同)

Ray*_*lus 10

我不会过分依赖预检缓存.

从规格:

用户代理可以在max-age字段中指定的时间之前清除缓存条目.

另外,请记住以下内容(来自CORS规范):

当预检结果缓存中有一个缓存条目时,会有一个缓存匹配,其满足以下条件:

原始字段值是源原始的区分大小写的匹配项.

url字段值是请求URL的区分大小写的匹配项.

凭证字段值为true且未设置省略凭证标志,或者为false并且设置了省略凭证标志.

您的屏幕截图无法确定上述任何一项是否属实.