为什么这个跨域的ajax调用实际上有效?

car*_*tor 6 ajax jquery web-services cross-domain

我无意中写了一个跨域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();
      }
});
Run Code Online (Sandbox Code Playgroud)

事实是,它适用于所有浏览器,尽管来自不同的域.鉴于单一来源政策,为什么这实际上有效?

页面在这里:http://sftransitfirst.org/F/,从下拉菜单中选择一个停止触发ajax.

正如所料,对谷歌地图API Web服务进行类似的调用失败了熟悉Origin ... is not allowed by Access-Control-Allow-Origin(并且它不支持jsonp).

Ale*_*ore 11

他们必须以这种方式明确允许跨域访问:

<?php header('Access-Control-Allow-Origin: *'); ?>
Run Code Online (Sandbox Code Playgroud)

或者使用htaccess:

<ifModule mod_headers.c>
    Header set Access-Control-Allow-Origin: *
</ifModule>
Run Code Online (Sandbox Code Playgroud)


aps*_*ers 5

许多现代Web API支持跨域资源共享(CORS).CORS是一种网站自愿使其网页可用于跨域脚本的方法.Access-Control-Allow-Origin来自服务器的HTTP标头向您的Web浏览器发出信号,即使脚本在不同的源上运行,也可以允许脚本使用Ajax访问该页面.如果服务器不提供CORS标头,您的浏览器将像往常一样强制执行SOP.

大多数API选择将其页面公开为跨域脚本,因为他们知道几乎所有用户都希望能够通过Ajax从他们自己的域访问API.