【问题标题】:Angularjs CORS issue on some macs machine browsers某些 Mac 机器浏览器上的 Angularjs CORS 问题
【发布时间】: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有什么限制限制吗?

标签: javascript angularjs node.js macos google-chrome


【解决方案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 中设置内容类型
猜你喜欢
  • 2010-12-29
  • 2021-03-27
  • 1970-01-01
  • 2016-04-23
  • 2016-12-08
  • 2018-09-05
  • 2015-08-05
  • 2013-12-21
  • 1970-01-01
相关资源
最近更新 更多