什么是CORS Access-Control-Max-Age缓存

时间:2017-09-29 19:17:03

标签: cors preflight

如果我回复了一个包含access-control-request-method:PUT的响应标头access-control-allow-origin并且与access-control-allow-method:PUT匹配的access-control-max-age:7200和{{1}}将会被缓存2小时并且始终只返回方法PUT或者如果说下一个请求是access-control-request-method:POST,我是否能够只响应所请求的特定方法?

1 个答案:

答案 0 :(得分:2)

  

如果我回复了包含access-control-request-method:PUT的响应标头access-control-allow-origin的cors请求,其响应标头access-control-allow-method:PUT与原点匹配,而access-control-max-age:7200PUT将被缓存2小时

是的,虽然在Chrome中它只会缓存10分钟 - 因为the Chrome sources hardcode an upper limit for it of 600 seconds(10分钟),无论您指定的值是多大。

  

并且始终只返回方法PUT,或者如果说下一个请求是access-control-request-method:POST?

,我是否能够仅使用所请求的特定方法进行响应

它不会总是只返回access-control-request-method: POST;如果下一个请求有PUT,则会跳过缓存并向您的服务器发出新请求。

这符合Fetch spec中的相关要求(当前定义CORS协议的浏览器行为的规范);具体而言,浏览器需要按每个方法缓存预检,并且仅在“method cache match”时使用缓存。

因此,您使用PUT方法的第一个请求会为Access-Control-Max-Age个请求创建一个预检缓存条目,期限为POST秒 - 以及POST的任何下一个请求method会为Access-Control-Max-Age个请求创建一个单独的预检缓存条目,其自身的有效期为renderToString秒。