某些 Mac 机器浏览器上的 Angularjs CORS 问题

Posted

技术标签:

【中文标题】某些 Mac 机器浏览器上的 Angularjs CORS 问题【英文标题】:Angularjs CORS issue on some macs machine browsers 【发布时间】:2015-10-04 17:15:50 【问题描述】:

我们有使用 Angularjs 的前端,我们点击 apis 从另一个使用 apache 服务器和另一个域作为 nodejs 服务器的域获取详细信息。

在为两台服务器点击 api 时,在某些 mac 机器中,api 在 OPTIONS 请求本身中失败。我不明白为什么它只发生在某些机器上。

在初始调用中,在浏览器中检查时显示失败,类型也是 xhr 方法。

有人可以帮助我们解决为什么我们面临这些问题。

工作正常的系统具有请求标头

请求标头 查看源代码 接受:/ 接受编码:gzip、deflate、sdch 接受语言:en-US,en;q=0.8 访问控制请求标头:接受,内容类型 访问控制请求方法:POST 连接:保持活动 主机:XXX.XXXXX.com 来源:http://localhost 推荐人:http://localhost/XXXXX/ 用户代理:Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/43.0.2357.132 Safari/537.36 [7/15/2015 8:20:06 PM] karthick raja:它显示了这个请求标头

我们在成功机器上得到响应

但是失败的系统有

请求标头 访问控制请求标头:接受,内容类型 访问控制请求方法:POST 主机:xxxx.xxxx.xom 来源:http://localhost 推荐人:http://localhost/XXXXXX/ 用户代理:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36

在失败的机器上,服务会失败

【问题讨论】:

通过提供所有响应标头来获得更多帮助,否则这是一场大猜谜游戏。 api有什么限制限制吗? 【参考方案1】:

某些浏览器会为您的发布请求发出预检请求,因为 您的请求标头中的内容类型似乎为空。请将内容类型设置为以下之一:

application/x-www-form-urlencoded 多部分/表单数据 文本/纯文本

除了上述 Content-type 设置为请求头之外,浏览器会为 post 方法放置一个预检请求。

要了解有关“预检请求”的更多信息,请查看以下链接以获得更好的想法。 https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Preflighted_requests

【讨论】:

我们是否可以添加多个内容类型,例如 application/json,text/plain 不,您不能为一个请求使用多种内容类型。添加上面列出的三种内容类型中的一种以避免预检请求或确保服务器响应选项方法 如何以及在哪里可以在 angularjs 中设置内容类型 请查看此链接:***.com/questions/17610238/…

以上是关于某些 Mac 机器浏览器上的 Angularjs CORS 问题的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS 材质对话框在 Mac Safari 中无法正确显示

AngularJS 在开发机器上禁用部分缓存

移动浏览器上的 AngularJS 和 ASP.Net WebAPI 社交登录

CB_SELECTSTRING 在某些机器上被忽略

Mac应用程序安装在开发人员机器上的未知位置

如何使用 AngularJs 或其他 JavaScripts 查找浏览器应用程序设置?