我想知道浏览器如何处理同时包含 Vary的CORS Preflight响应:Origin Access-Control-Max-Age header 。

该语句来自https://www.w3.org/TR/cors/



通过此语句,我了解的变化:起源会告诉浏览器阻止缓存预检响应(如果allow-origin:*未使用)

Access-Control-Max-Age 将告诉浏览器将对飞行前响应进行一段时间的缓存。

问题:

  • 如果预检响应中同时存在两个 header ,是否有效?
  • 如果响应包含两个 header ,浏览器如何处理预检响应?

  • 谢谢!

    最佳答案

    根据规范要求Vary: Origin不会影响CORS-preflight cache的行为。

    是的,这是有效的。但是,如果存在Vary header ,则它对CORS预检缓存没有影响。

    对于CORS预检缓存,浏览器完全忽略Vary header ,而仅使用Access-Control-Max-Age header 的值。

    这不是Fetch规范中的要求。
    CORS-preflight cache不是HTTP规范中要求所涵盖的常规HTTP缓存。这是一个特殊的缓存,其行为完全由Fetch规范定义。而且Fetch规范没有声明任何关于CORTS预检缓存行为完全受Vary响应 header 影响的要求,甚至是间接的。
    而是the Fetch spec says just this:

    这与在设置max-age之前查询Vary header 的值无关。
    而且由于该规范在决定是否填充CORS预检缓存时未明确说明是否/如何使用Vary,因此浏览器在执行此操作时一定不能使用Vary
    如果浏览器在处理CORS预检缓存时确实使用了Vary,则该浏览器将不符合CORS预检缓存的规范要求。

    10-01 07:24