一个技术性很强的问题,只有知道浏览器内部的人才能回答......
浏览器缓存的CORS预检响应究竟是多少(假设在对OPTIONS预检请求的响应中返回了Access-Control-Max-Age响应头)?
基本上,在规范(https://www.w3.org/TR/cors/#preflight-result-cache-0)中,它表示预检结果缓存中的每个条目都包含以下字段:
(方法和标题是互斥的)
主缓存密钥由除max-age之外的所有字段组成。
因此,如果我收到对包含以下内容的OPTIONS预检请求的回复:
Access-Control-Allow-Origin: http://www.example.com
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: GET, POST, OPTION, HEAD
Access-Control-Allow-Headers: x-cool, x-special, x-sweet
Access-Control-Max-Age: 3600
那么我认为这会导致所有将以下条目添加到预检缓存中吗?
http://www.example.com <url> 3600 true GET
http://www.example.com <url> 3600 true POST
http://www.example.com <url> 3600 true OPTIONS
http://www.example.com <url> 3600 true HEAD
http://www.example.com <url> 3600 true x-cool
http://www.example.com <url> 3600 true x-special
http://www.example.com <url> 3600 true x-sweet
我的问题是:
&LT;咆哮&GT;
FWIW,我希望我可以指定 Access-Control-Allow-Headers:* (这意味着我的原始服务器允许通过实际请求传递给它的所有标头)。同样,能够指定 Access-Control-Expose-Headers:* 会很好,所以我不需要弄清楚每一个是否需要将它暴露给客户端JS 。因为他们无论如何都会在响应中被传递,所以无法公开它们有点毫无意义 - 确保提出CORS请求的JS无法看到它们,但它们并不像它们被隐藏从技术上知识渊博的最终用户 - 使用控制台或Fiddler或Charles的任何人都可以看到它们。
&LT; /咆哮&GT;
叹息。
更新:我与其中一位Chrome开发人员进行了交谈,他已确认无法查看CORS缓存(至少在Chrome中)。
更新2 :已添加访问控制允许标头:* 和访问控制权限 - 标题:* 获取规格!好极了!没有关于每个浏览器的哪个版本(如果有的话)支持它们的消息。
答案 0 :(得分:0)
FWIW,我希望我可以指定Access-Control-Allow-Headers:* (这意味着我的原始服务器允许传递给它的所有标头 实际的要求)。同样,能够指定 Access-Control-Expose-Headers:*
可能的解决方法是收集所有标头密钥并在Access-Control-Expose-Headers中返回。