提问者:小点点

获取API;如果响应是不透明的,为什么要使用“no-cors”模式?


我读了这个问题和这个问题。前者只解释“无源”与“同源”;后者建议“no-cors”不有用,因为响应不透明(Javascript无法读取/执行任何有用的操作):

有人能告诉我们,在这些“有限的情况”中,我们想要使用“no-cors”的例子是什么吗(尽管反应是不透明的?)

我能想到的唯一情况是一种单向交流;如果客户机向服务器发送GET或POST就足够了,那么服务器就可以跟踪请求的发生;(例如,增加请求计数器);...

...那么反应是一个不透明的就足够了;也就是说,客户机只需要知道请求是否成功(状态200),而不期望任何有效负载响应。


共1个答案

匿名用户

请记住,CORS设置并不阻止请求到达服务器--这就是身份验证和CSRF的作用。相反,它防止页面读取响应。请求仍然是:

  1. 从页面发送,
  2. 浏览器添加起源标头,
  3. 它仍然由服务器处理(通常-CORS与此无关,尽管可能有其他安全措施),
  4. ,当返回时,浏览器检查响应头是否为access-control-allog-origin。如果它与浏览器认为的匹配,则浏览器允许页面查看请求的结果。

这是密钥同源策略,CORS设置禁止合作浏览器中的页面看到响应。

    null
    null

CORS做上述工作。它不执行以下操作:

  • 阻止服务器处理请求-这就是身份验证和CSRF预防的作用。
  • 停止欺骗Origin标头--这只适用于协作浏览器。作为攻击者,您通常无法访问用户正在使用的浏览器。由于标头可以被欺骗,服务器不应该使用其中的数据以确保安全。(这就是为什么当通过curl/postman/insomnia这样的工具测试浏览器API时,您需要检查CORS头是否通过,因为它们接受所有响应,并且CORS策略从未应用。)