跨源资源共享中的this.withCredentials属性中的问题

时间:2013-10-07 09:30:18

标签: javascript angularjs cors

我们正在实施一个基于AngularJS的应用程序,该应用程序使用托管在不同域中的其他Web服务。以下脚本用于CORS,它在Chrome和FireFox上运行良好。在进行身份验证时,它在IE9和Safari中存在问题。似乎问题出在这些浏览器中的 withCredentials 属性。有没有其他方式IE和Safari支持CORS?

<script type="text/javascript">
     XMLHttpRequest.prototype.realSend = XMLHttpRequest.prototype.send;
     XMLHttpRequest.prototype.send = function(vData) {
        this.withCredentials = true;
        this.realSend.apply(this, arguments);
     };
</script>

1 个答案:

答案 0 :(得分:7)

根据我们尝试的不同情景,我们可以得出以下摘要。希望这会有用。

  1. 根据浏览器规格IE10 +和Safari 4+版本 支持XHR和withCredentials属性。
  2. 可以在没有任何问题的情况下用于CORS,如上面的脚本。
  3. 对于其他IE版本(9-),我们需要使用XDR。
  4. URL重写mod在服务器端没有成功 来到HTTPS。
  5. 解决方案非常简单。默认情况下,IE和Safari已禁用第三方cookie。由于我们在用户输入登录凭据后使用两个不同的域,因此这些浏览器无法保存该cookie。因为所有其他请求都是未经授权的。

    允许第三方Cookie的步骤

    • IE 10 - 互联网选项&gt;隐私&gt;高级&gt;第三方Cookie&gt; 接受
    • Safari - 偏好设置&gt;隐私&gt;阻止Cookie&gt;从未

    由于这个问题,我们发现在AngularJS版本1.1.1+中,他们通过在'config'模块中设置'withCredentials'值来简化它( $ httpProvider.defaults.withCredentials = true;)