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

标签 javascript angularjs cors

我们正在实现一个基于 AngularJS 的应用程序,它使用托管在不同域中的 rest 网络服务。以下脚本用于 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. 根据浏览器规范 IE10+ 和 Safari 4+ 版本 支持 XHR 和 withCredentials 属性。
  2. 可以像上面的脚本一样毫无问题地用于 CORS。
  3. 对于其他 IE 版本 (9-),我们需要使用 XDR。
  4. URL 重写模式在服务器端不成功 来到 HTTPS。

解决方案非常简单。默认情况下,IE 和 Safari 已禁用第 3 方 cookie。由于我们在用户输入凭据登录后使用两个不同的域,因此这些浏览器无法保存该 cookie。因此,所有其他请求都是未经授权的。

允许第 3 方 cookie 的步骤

  • IE 10 - Internet 选项 > 隐私 > 高级 > 第三方 Cookie > 接受
  • Safari - 首选项 > 隐私 > 阻止 Cookies > 从不

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

关于javascript - 跨源资源共享中的 this.withCredentials 属性问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19221242/

相关文章:

java - CORS 允许来源限制不会导致服务器拒绝请求

javascript - 使用 jQuery 进行 CORS 身份验证

javascript - 如何暂停和恢复jquery间隔

javascript - 将 JSON\n 转换为 HTML <br> 标记

javascript - 我的 AngularJS 1.x 应用程序在 Angular 2 之后还能运行吗?

javascript - 将智能表添加到meanjs堆栈

javascript - AngularJS指令渲染模板两次

jquery - 使用 JQuery 在 Internet Explorer 中进行 CORS 身份验证

javascript - 无法读取未定义的属性 'map'

javascript - 更改附加表行字段的名称 jQuery