我想知道浏览器如何处理同时包含 Vary的CORS Preflight响应:Origin 和 Access-Control-Max-Age header 。
该语句来自https://www.w3.org/TR/cors/
通过此语句,我了解的变化:起源会告诉浏览器阻止缓存预检响应(如果allow-origin:*未使用)
Access-Control-Max-Age 将告诉浏览器将对飞行前响应进行一段时间的缓存。
问题:
谢谢!
最佳答案
根据规范要求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预检缓存的规范要求。