为什么这种跨域ajax调用实际上有效



我无意中编写了一个跨域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。

正如预期的那样,使用熟悉的Origin ... is not allowed by Access-Control-Allow-Origin(它不支持jsonp)对Google Maps API Web Services进行类似调用失败。

他们必须明确允许跨域访问,其方式如下:

<?php header('Access-Control-Allow-Origin: *'); ?>

或者使用htaccess:

<ifModule mod_headers.c>
    Header set Access-Control-Allow-Origin: *
</ifModule>

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

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

相关内容

  • 没有找到相关文章

最新更新