谁可以排除同源政策?

mar*_*zzz 3 ajax jquery same-origin-policy

代码.为什么

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

工作和

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

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

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

aps*_*ers 8

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

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

编辑

根据W3C Ajax规范:

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

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

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

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