3

代码。为什么

$.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同源策略异常!

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

4

2 回答 2

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 标头进行响应。

于 2013-06-21T14:28:04.573 回答
1

由服务器(facebook、google 等)决定是否允许跨域加载其内容。这称为跨域资源共享。要在您的服务器上启用 CORS,请在您的响应中提供此标头:Access-Control-Allow-Origin: *.

您无法更改不属于您的服务器的行为。

于 2013-06-21T14:22:53.497 回答