带有跨域重定向的 Safari xhr (AJAX) 请求失败

Posted

技术标签:

【中文标题】带有跨域重定向的 Safari xhr (AJAX) 请求失败【英文标题】:Safari xhr (AJAX) requests w/ cross-domain redirect fails 【发布时间】:2016-01-07 18:11:42 【问题描述】:

如何重现问题

    使用 Safari 向服务器发出 AJAX 请求 让服务器以 302 响应到不同的域

如果这些条件中的任何一个满足,它就会起作用。

    使用其他浏览器,它可以工作。 让服务器重定向到同一个域,它可以工作。

.

Load: function (in_url, in_cb, in_responseType) 
  var xhr = new XMLHttpRequest();
  xhr.open('GET', in_url, true);
  xhr.onload = function () 
    if (xhr.status === 200) 
      in_cb(null, xhr.response);
     else 
      in_cb(new Error('[Loader] Could not fetch from: '+in_url+', status: '+xhr.status));
    
  ;
  xhr.onerror = function (error) 
    in_cb(error);
  ;

  xhr.send();

【问题讨论】:

这是 Safari 的一个已知问题。从最近bugs.webkit.org/show_bug.cgi?id=112471 开始,它似乎实际上正在开发中。 但请确保您的服务器支持 CORS 【参考方案1】:

此bug 已修复。 Safari 10.1 (WebKit 603.1.30) 是第一个不受影响的版本。

【讨论】:

谢谢!不幸的是,我很久以前就问过我不再有代码可以测试了。如果有人可以确认它已修复,我会将您的回复标记为正确

以上是关于带有跨域重定向的 Safari xhr (AJAX) 请求失败的主要内容,如果未能解决你的问题,请参考以下文章

跨域 ajax 不适用于移动 Safari 中的重定向

跨域重定向跟踪流量来源

获取 API、自定义请求标头、CORS 和跨域重定向

Google OAuth2:重定向已被 CORS 政策阻止:请求需要预检,不允许遵循跨域重定向

SSO单点登录跨域重定向跨域设置Cookie京东单点登录实例分析

Chrome 在重定向时取消 CORS XHR