一个技术性很强的问题,可能只有了解浏览器内部结构的人才能回答......
浏览器缓存 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
Run Code Online (Sandbox Code Playgroud)
那么我认为这会导致以下所有条目添加到预检缓存中是否正确?
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
Run Code Online (Sandbox Code Playgroud)
我的问题是:
<咆哮>
FWIW,我希望我可以指定Access-Control-Allow-Headers: *(意味着我的源服务器允许所有标头与实际请求一起传递给它)。同样,能够指定Access-Control-Expose-Headers: *会很好,所以我不需要为每个人弄清楚是否需要将它公开给客户端 JS。由于无论如何它们都会在响应中传递,因此无法公开它们是毫无意义的 - 确保发出 CORS 请求的 JS 无法看到它们,但这并不是说它们对技术知识模糊的最终用户隐藏- 任何使用控制台或 Fiddler 或 Charles 的人都可以看到它们。
</rant>
叹。
更新:我与 Chrome 的一位开发人员进行了交谈,他确认无法查看 CORS 缓存(至少在 Chrome 中)。
更新 2:两个Access-Control-Allow-Headers: *和Access-Control-Expose-Headers: *已添加到获取规范中!好极了!没有关于每个浏览器的哪个版本(如果有)支持它们的消息。
FWIW,我希望我可以指定 Access-Control-Allow-Headers: * (这意味着我的源服务器允许通过实际请求传递给它的所有标头)。同样,能够指定 Access-Control-Expose-Headers:*
一个可能的解决方法是收集所有标头键并将其返回到 Access-Control-Expose-Headers 中。
| 归档时间: |
|
| 查看次数: |
2370 次 |
| 最近记录: |