Javascript:跨源资源共享的XMLHttpRequest问题

时间:2011-07-27 13:38:23

标签: javascript json xmlhttprequest cross-domain

我正在向Google Places API发出JSON请求:

    function load(){

    var req = new XMLHttpRequest();

    req.open('GET', 'https://maps.googleapis.com/maps/api/place/details/json?reference=CnRhAAAARMUGgu2CeASdhvnbS40Y5y5wwMIqXKfL-n90TSsPvtkdYinuMQfA2gZTjFGuQ85AMx8HTV7axABS7XQgFKyzudGd7JgAeY0iFAUsG5Up64R5LviFkKMMAc2yhrZ1lTh9GqcYCOhfk2b7k8RPGAaPxBIQDRhqoKjsWjPJhSb_6u2tIxoUsGJsEjYhdRiKIo6eow2CQFw5W58&sensor=true&key=xxxxxxxxxxxxx', false);

    req.send(null);

    if(req.status == 200){  

      dump(req.responseText);

        }
}

但Chrome正在返回错误:

XMLHttpRequest cannot load https://maps.googleapis.com/maps/api/place/details/json?reference=CnRhAAAARMUGgu2CeASdhvnbS40Y5y5wwMIqXKfL-n90TSsPvtkdYinuMQfA2gZTjFGuQ85AMx8HTV7axABS7XQgFKyzudGd7JgAeY0iFAUsG5Up64R5LviFkKMMAc2yhrZ1lTh9GqcYCOhfk2b7k8RPGAaPxBIQDRhqoKjsWjPJhSb_6u2tIxoUsGJsEjYhdRiKIo6eow2CQFw5W58&sensor=true&key=xxxxxxxxxxxxxx. 
Origin http://sandrayoon.com is not allowed by Access-Control-Allow-Origin.

有没有办法阻止或规避跨域资源共享?我对这个安全问题不太熟悉。

2 个答案:

答案 0 :(得分:4)

防止这种情况的唯一方法是从服务器发送正确的Access-Control-Allow-Origin标头,这不受您的控制。所以基本答案是否定的。但是,您可以考虑使用服务器代理,该服务器代理将从服务器获取数据,并在提供客户端脚本的同一主机上将其发送给您。

答案 1 :(得分:3)

服务器应该使用“Access-Control-Allow-Origin”标头进行响应,以便让浏览器将此响应传递给javascript。您还可以设置“*”以允许任何跨域请求。

这是一个很好的intro主题。