我们正在实施一个基于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>
答案 0 :(得分:7)
根据我们尝试的不同情景,我们可以得出以下摘要。希望这会有用。
解决方案非常简单。默认情况下,IE和Safari已禁用第三方cookie。由于我们在用户输入登录凭据后使用两个不同的域,因此这些浏览器无法保存该cookie。因为所有其他请求都是未经授权的。
允许第三方Cookie的步骤
由于这个问题,我们发现在AngularJS版本1.1.1+中,他们通过在'config'模块中设置'withCredentials'值来简化它( $ httpProvider.defaults.withCredentials = true;)