gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 06:07:01 25 4
gpt4 key购买 nike

我们正在实现一个基于 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com