我无意中写了一个跨域AJAX调用NextBus(使用jQuery):
$.ajax({
url: 'http://webservices.nextbus.com/service/publicXMLFeed?command=predictions&a=sf-muni&r=1&s=6294',
dataType: 'xml',
success: function(data) {
do_stuff();
}
});
事情是,它适用于所有浏览器,尽管来自不同的域。鉴于单一来源政策,为什么这实际上有效?
页面在这里:http://sftransitfirst.org/F/,从下拉菜单中选择一个停靠点会触发ajax。
正如预期的那样,对Google Maps API Web Services进行类似的调用会因熟悉的Origin ... is not allowed by Access-Control-Allow-Origin
而失败(并且它不支持jsonp)。
答案 0 :(得分:11)
他们必须以这种方式明确允许跨域访问:
<?php header('Access-Control-Allow-Origin: *'); ?>
或者使用htaccess:
<ifModule mod_headers.c>
Header set Access-Control-Allow-Origin: *
</ifModule>
答案 1 :(得分:5)
许多现代Web API启用Cross-Domain Resource Sharing(CORS)。 CORS是一种网站自愿使其网页可用于跨域脚本的方法。来自服务器的Access-Control-Allow-Origin
HTTP标头向您的Web浏览器发出信号,即使脚本在不同的源上运行,也可以允许脚本使用Ajax访问该页面。如果服务器不提供CORS标头,您的浏览器将照常执行SOP。
大多数API选择将其网页公开给跨域脚本,因为他们知道几乎所有用户都希望能够通过Ajax从他们自己的域中访问API。