阻止来自原产地的CORs

时间:2015-03-10 17:50:34

标签: cors

试图了解CORs

如果我的网站http://example.com正在尝试向api.yelp.com发出请求,我知道Yelp需要使用Access-Control-Allow-Origin授权跨域调用。但是,我的同事说http://example.com还需要一个特殊的配置来允许调用api.yelp.com。如果我读到关于COR的内容,我看不到原始站点,在这种情况下http://example.com阻止了一个CORs调用。默认情况下,浏览器会执行此操作,但可以允许它在没有来自原点的特殊权限的情况下进行COR调用。这是正确的,还是我错过了什么?

1 个答案:

答案 0 :(得分:2)

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

正如您所说,api.yelp.com需要使用Access-Control-Allow-Origin*的{​​{1}}标头进行回复。如果请求包含任何非简单组件(除http://example.comGET以外的HTTP动词和/或任何非简单标头),则POST也必须使用相应的{{1 }和/或api.yelp.com响应标头。但是,这些标头也是Access-Control-Allow-Methods上配置的一部分,而不是Access-Control-Allow-Headers

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

简而言之,connect-src不需要允许api.yelp.com进行Ajax调用,但它可能会选择拒绝这样的调用,通过CSP指令。 (因此,如果已经存在这样的拒绝,您可能需要放松它。)