从源头阻止 COR

blocking CORs from origin

试图了解 COR

如果我的站点,http://example.com is trying to make a request to api.yelp.com, I get that Yelp would need to authorize the cross-origin call with Access-Control-Allow-Origin. However, my colleague is saying that http://example.com also needs a special config to allow the call api.yelp.com. If I read about CORs, I see nothing about the origin site, in this case http://example.com 阻止了 CORs 调用。默认情况下,浏览器会执行此操作,但可以允许它在未经源站特别许可的情况下进行 COR 调用。这是正确的,还是我遗漏了什么?

对于 Ajax 请求,all CORS configuration 只需在目标服务器上完成。

正如您所说,api.yelp.com 需要使用 *http://example.comAccess-Control-Allow-Origin header 进行响应。如果请求有任何 non-simple 组件(除 GETPOST、and/or 任何 non-simple headers 以外的 HTTP 动词)则 api.yelp.com 还必须使用适当的 Access-Control-Allow-Methods and/or Access-Control-Allow-Headers 响应 header 进行响应。但是,这些 header 也是 api.yelp.com 上的配置的一部分,而不是 example.com.

上的配置的一部分

也许您的同事正在考虑 Content Security Policy (CSP),它允许页面 限制 目标来源 Ajax 请求、图像、媒体、脚本和样式。默认情况下允许所有来源,但是当您添加 CSP 时,您可以将允许的来源限制为特定的白名单。如果您的站点为 connect-src 指令使用 CSP 白名单,您可能需要将 api.yelp.com 添加到其 CSP 白名单。

简而言之,example.com不需要允许api.yelp.com的Ajax调用,但它可以选择[=35] =]deny 这样的调用,通过 CSP 指令。 (因此,如果已经存在这样的拒绝,您可能需要放宽它。)