【发布时间】:2019-03-05 07:27:52
【问题描述】:
我读过 this question 和 this question 。前者只解释了“no-cors”与“same-origin”;后者建议“no-cors”因为不透明响应(Javascript 无法读取/执行任何有用的操作)而无用:
实际上,您基本上永远不想使用 mode: 'no-cors' — 除了在一些非常有限的情况下。那是因为什么设置模式: 'no-cors' 实际上对浏览器说的是,“阻止我的前端 通过查看响应正文内容的 JavaScript 代码 和任何情况下的标题。”在大多数情况下,这显然是 真的不是你想要的。
有人可以建议这些“有限情况”的例子有哪些我们想使用“no-cors”(即使响应是不透明的?)
我能想到的唯一情况是一种单向通信;如果客户端向服务器发送 GET 或 POST 就足够了,只是让服务器可以跟踪请求的发生; (例如,增加请求计数器); ...
...那么响应为 OpaqueResponse 就足够了;即客户端只需要知道请求是否成功(状态 200),不需要任何有效负载响应。
我的想法是一个有效的例子吗?有人可以推荐其他可能性/用例/'no-cors'用法示例吗?
【问题讨论】:
-
在stackoverflow.com/a/39109790/441757 上查看答案。主要情况是(1)当您想要对资源做的唯一事情是缓存它时,以及(2)当您想要将资源用作
<script>、<link rel="stylesheet">、@987654328 的内容时文档中的@、<video>、<audio>、<object>和<embed>或<iframe>元素(之所以有效,是因为这些元素允许跨域嵌入资源)。 -
就缓存案例而言,正如stackoverflow.com/a/39109790/441757 中所解释的那样,实际上适用的场景是当您使用 Service Worker 时,在这种情况下,相关的特定 API 是缓存存储APIdeveloper.mozilla.org/en-US/docs/Web/API/CacheStorage
-
非常感谢;另一个答案很好,但是您在此处的澄清/总结很有帮助且具体。