试图了解CORs
如果我的网站http://example.com正在尝试向api.yelp.com发出请求,我知道Yelp需要使用Access-Control-Allow-Origin授权跨域调用。但是,我的同事说http://example.com还需要一个特殊的配置来允许调用api.yelp.com。如果我读到关于COR的内容,我看不到原始站点,在这种情况下http://example.com阻止了一个CORs调用。默认情况下,浏览器会执行此操作,但可以允许它在没有来自原点的特殊权限的情况下进行COR调用。这是正确的,还是我错过了什么?
答案 0 :(得分:2)
对于Ajax请求,all CORS configuration只需要在目标服务器上完成。
正如您所说,api.yelp.com
需要使用Access-Control-Allow-Origin
或*
的{{1}}标头进行回复。如果请求包含任何非简单组件(除http://example.com
或GET
以外的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指令。 (因此,如果已经存在这样的拒绝,您可能需要放松它。)