CORS Access-Control-Max-Age 缓存了啥
Posted
技术标签:
【中文标题】CORS Access-Control-Max-Age 缓存了啥【英文标题】:What is cached with CORS Access-Control-Max-AgeCORS Access-Control-Max-Age 缓存了什么 【发布时间】:2018-03-11 18:11:31 【问题描述】:如果我响应包含access-control-request-method:PUT
的cors 请求,响应标头access-control-allow-origin
与原点匹配,并且仅access-control-allow-method:PUT
和access-control-max-age:7200
将被缓存2 小时并且始终只返回方法PUT 或者我会如果说下一个请求是 access-control-request-method:POST,是否能够仅使用请求的特定方法进行响应?
【问题讨论】:
【参考方案1】:如果我响应包含
access-control-request-method:PUT
的 cors 请求,响应标头access-control-allow-origin
与源匹配,并且仅access-control-allow-method:PUT
和access-control-max-age:7200
将被缓存 2 小时
是的,尽管在 Chrome 中它只会被缓存 10 分钟。 The Chrome sources hardcode an upper limit for it of 600 seconds(10 分钟)无论您指定多大的值。
并且总是只返回 PUT 方法,或者如果说下一个请求是 access-control-request-method:POST,我是否能够只使用请求的特定方法进行响应?
它不会总是只返回PUT
;如果下一个请求有access-control-request-method: POST
,那么缓存将被跳过,新的请求将发送到您的服务器。
这是根据Fetch spec(当前为 CORS 协议定义浏览器行为的规范)中的相关要求;具体来说,浏览器需要为每个方法缓存预检,并且仅在有 “method cache match” 时才使用缓存。
因此,您使用PUT
方法的第一个请求会为PUT
请求创建一个预检缓存条目,其到期时间为Access-Control-Max-Age
秒 - 任何使用POST
方法的下一个请求都会创建一个单独的预检缓存条目对于POST
请求,其自身的到期时间为Access-Control-Max-Age
秒。
【讨论】:
以上是关于CORS Access-Control-Max-Age 缓存了啥的主要内容,如果未能解决你的问题,请参考以下文章
AspNet.Cors 和 AspNet.WebApi.Cors 有啥区别?
Wagtail、CORS 和 Django-Cors-Headers。如何启用 CORS 以便 AXIOS 可以访问端点