谁可以排除同源政策?

时间:2013-06-21 14:01:40

标签: jquery ajax same-origin-policy

Code。为什么

$.ajax({
    type : "get",
    url : "http://www.facebook.com",        
    success: function(data){
           console.log(data);
     }
});

有效,

$.ajax({
    type : "get",
    url : "http://www.google.com",        
    success: function(data){
           console.log(data);
     }
});

在浏览器控制台上抛出着名的XMLHttpRequest cannot load同源策略异常!

为什么呢?我想这取决于浏览器?

2 个答案:

答案 0 :(得分:8)

http://www.facebook.com发送301 Moved Permanently响应,重定向到https://www.facebook.com

似乎重定向导致请求比完全跨域失败更安静地失败。但是,两个请求失败。

修改

根据W3C Ajax specification

  

如果响应的HTTP状态代码为301,302,303,307或308 ...

     
      
  1. 将请求网址设置为Location标头传送的网址。
  2.   
  3. 如果请求URL的来源和来源是相同的来源,则在遵守相同来源请求事件规则的同时透明地遵循重定向。
  4.   
  5. 否则,请遵循跨源请求步骤并终止此算法的步骤。
  6.   

文本“透明地遵循重定向”意味着Ajax应将301重定向的目标视为原始目标。但是,在执行重定向时,将针对新目标原点重新检查同源策略。

目标域必须与请求脚本具有相同的来源,或者它必须使用允许请求来源访问的CORS头进行响应。

答案 1 :(得分:1)

服务器(Facebook,谷歌等)允许跨域加载内容。这称为跨源资源共享。要在服务器上启用CORS,请在回复中提供此标头:Access-Control-Allow-Origin: *

您无法更改您不拥有的服务器的行为。