【问题标题】:How does CORS plugin / --disable-web-security work on browser?CORS 插件 / --disable-web-security 如何在浏览器上工作?
【发布时间】:2016-11-06 15:55:44
【问题描述】:

我确信我不是唯一一个在对外部(甚至内部)API 端点进行 API 调用时使用/使用 CORS plugins 浏览器或 --disable-web-security 标志的人。我使用这个插件来进行谷歌地图相关的 API 调用。但在同一个应用程序中,ParseSDK API 调用不需要CORS--disable-web-security 标志。

我的问题是:为什么这些端点的行为不同以及 CORS 插件如何解决问题(即使我们无法控制这些 API)?

提前致谢。

【问题讨论】:

    标签: javascript ajax api cors


    【解决方案1】:

    您发布的链接(您阅读说明了吗?)确切地说明了扩展的作用——它将Access-Control-Allow-Origin: * 标头添加到所有响应中。这是一个 CORS 标头,通常服务器会发送该标头以通知浏览器您可以从任意来源发出请求。

    Parse SDK 可能在其服务器端支持 CORS。

    仅供参考,当大多数人说 CORS 时,他们并不是指浏览器扩展。他们指的是称为 CORS 的网络标准。文档如下。

    https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS

    【讨论】:

      【解决方案2】:

      好吧,那个插件的行为是非常不负责任的;它实际上禁用了同源策略,该策略强制特定源上的网站只能向该源发出请求。

      同源策略实际上只是阻止网站读取 GET/POST 请求的响应,请求本身已发出,因为它被视为保存。

      随着时间的推移,这种良好的安全功能成为一种负担,人们使用 JSONP 等变通方法。

      所以我们有了一种新的、标准化的方式来访问外国来源:

      CORS(跨域资源共享)是一种允许 Web 服务器指定允许另一个源访问其内容的机制。这是通过 Access-Control-Allow-Origin: example.com 完成的,它允许 example.com 访问响应,即使响应来自不同的来源。

      Access-Control-Allow-Credentials: true 还允许在请求中发送凭据,其中包括 cookie 和 HTTP 基本身份验证。

      您还可以为Access-Control-Allow-Origin: * 指定一个通配符,它​​允许所有网站访问此响应。但是,当您这样做时,您必须指定Access-Control-Allow-Credentials: false,因此不会暴露任何凭据。

      这是在互联网上实现公共可访问 AJAX API 的唯一正确方法。

      然而,这个插件只是简单地禁用了完全 极其危险的同源策略。

      【讨论】:

      • 但是该插件如何仅适用于白名单域? --disable-web-security 只是一个布尔值?该插件更进一步,允许绕过某些域 [响应者] 的 CORS?插件是如何实现这种特异性的?
      猜你喜欢
      • 2019-12-21
      • 2013-10-16
      • 1970-01-01
      • 1970-01-01
      • 2012-04-10
      • 2011-01-07
      • 2016-12-08
      • 1970-01-01
      • 2016-07-01
      相关资源
      最近更新 更多