【问题标题】: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:PUTaccess-control-max-age:7200 将被缓存2 小时并且始终只返回方法PUT 或者我会如果说下一个请求是 access-control-request-method:POST,是否能够仅使用请求的特定方法进行响应?

【问题讨论】:

    标签: cors preflight


    【解决方案1】:

    如果我响应包含 access-control-request-method:PUT 的 cors 请求,响应标头 access-control-allow-origin 与源匹配,并且仅 access-control-allow-method:PUTaccess-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 秒。

    【讨论】:

      猜你喜欢
      • 2019-01-31
      • 2014-06-25
      • 2017-08-08
      • 2020-04-04
      • 2015-10-19
      • 2019-09-30
      • 2021-01-08
      • 2018-05-08
      相关资源
      最近更新 更多