我确定我不是唯一一个在对外部(甚至内部)API进行API调用时使用/使用CORS
插件进行浏览器或--disable-web-security
标记的人端点。我使用此插件来制作与Google Maps相关的API调用。但是在同一个应用程序中,ParseSDK API调用不需要CORS
或--disable-web-security
标志。
我的问题是:为什么这些端点的行为不同以及CORS插件如何解决问题(即使我们无法控制这些API)?
提前致谢。
答案 0 :(得分:2)
您发布的链接(您是否阅读了说明?)指定了扩展程序的确切内容 - 它会将Access-Control-Allow-Origin: *
标头添加到所有响应中。这是一个CORS标头,通常服务器发送该标头以通知浏览器您可以从任意来源发出请求。
Parse SDK可能在其服务器端支持CORS。
仅为了您的信息,当大多数人说CORS时,他们并不是指浏览器扩展。他们指的是名为CORS的网络标准。以下文档。
https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
答案 1 :(得分:1)
那么,该插件的作用是非常不负责任的;它实际上禁用了相同的原始策略,该策略强制特定来源的网站只能向该来源发出请求。
相同的原始政策实际上只是阻止网站读取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的唯一正确方法。
但是这个插件只是简单地禁用完全相同的原始策略 非常危险。