Ajax 角力传感器

Ajax 角力传感器,ajax,angularjs,cors,Ajax,Angularjs,Cors,我已经看到angular(1.2.17)正在发送一个选项请求,如果我们在ajax中的另一个域上设置一些自定义头(使用$http)。 我知道这是某个地方的RFC的一部分(无需指出),但我会强制发送实际请求,因为用户将在非洲某个地方的3G网络后面(您猜选项标题将不起作用) 因此,问题肯定出在客户端,因为$.ajax可以工作,而不是$http。 在这个问题上,我在stackoverflow中看到了其他线程,但我不想配置服务器端,我想在angular中在客户端禁用它。(请不要这样建议) 我看到的useX

我已经看到angular(1.2.17)正在发送一个选项请求,如果我们在ajax中的另一个域上设置一些自定义头(使用$http)。 我知道这是某个地方的RFC的一部分(无需指出),但我会强制发送实际请求,因为用户将在非洲某个地方的3G网络后面(您猜选项标题将不起作用)

因此,问题肯定出在客户端,因为$.ajax可以工作,而不是$http。 在这个问题上,我在stackoverflow中看到了其他线程,但我不想配置服务器端,我想在angular中在客户端禁用它。(请不要这样建议)

我看到的useXDomain选项没有任何作用,domainWhiteList也不起作用。
有没有办法完全禁用这个东西?(或者我将不得不对ajax部分使用jquery)。

不是AngularJS直接执行选项请求,而是由XHR完成。您可以检查,AngularJS没有显式执行选项请求

根据,XHR首先在以下情况下执行选项请求:

  • 它使用的方法不是GET、HEAD或POST。此外,如果POST用于发送内容类型不是的请求数据 application/x-www-form-urlencoded、多部分/表单数据或text/plain, e、 g.如果POST请求使用 application/xml或text/xml,则请求被预引导
  • 它在请求中设置自定义标头(例如,请求使用诸如X-PINGOTHER之类的标头)
我注意到AngularJS将POST请求的内容类型头设置为
application/json;字符集=utf-8
。我会尝试将其设置回
text/plain

 $httpProvider.defaults.headers.post = {'Content-Type': 'text/plain'}

如果这不起作用,我建议你检查一下当由
$发出请求时,请求头与由
$http

发出的请求头之间有什么区别?这是在firefox上发生的还是仅在chrome上发生的?我在发布问题10分钟后就找到了答案,我花了整整一天的时间处理这个问题。。。显然,这确实是直接在浏览器中实现的,JQuery之所以能够工作是因为它没有自定义头(而且“授权”似乎是自定义头的一部分,这就是angular请求失败的原因)。这里唯一的解决方案是为同一个域上的请求创建一个代理…出于某些原因,它似乎可以处理chrome上的空帖子