有没有办法避免使用 $http 进行预检?

Posted

技术标签:

【中文标题】有没有办法避免使用 $http 进行预检?【英文标题】:Is there a way to avoid Preflighting with $http? 【发布时间】:2013-08-12 05:40:33 【问题描述】:

我在远程服务器上使用 nginx,并且不支持 OPTIONS 方法,我被卡住了。服务器和 Angular 都拒绝互相交谈。

我只想发出一个简单的 $http.post() 请求。有没有办法将服务配置为仅发送 POST 请求,而不使用 OPTIONS 进行任何预检?

【问题讨论】:

【参考方案1】:

如果 CORS 是不可避免的 您可以将请求的标头更改为 text/plain,然后根据下面此链接中的答案手动解析您的响应

How to skip the OPTIONS preflight request in AngularJS

【讨论】:

【参考方案2】:

这不是 AngularJS 所做的事情,而是您的浏览器根据跨域资源共享标准所做的事情。 See also this answer on a related issue.

但是,如果您使 AngularJS 应用程序从与您的资源相同的域提供服务(不同的子域将影响跨域),那么浏览器将不会发送 OPTIONS 请求,因为资源不再来自跨域服务器。

例子:

www.example.com 请求 api.example.com 上的资源将触发 OPTIONS 请求 www.example.com 从 www.example.com/api 请求资源将不会触发 OPTIONS 请求

【讨论】:

在我目前的情况下,跨域是不可避免的:(我还有其他选择吗?

以上是关于有没有办法避免使用 $http 进行预检?的主要内容,如果未能解决你的问题,请参考以下文章

避免使用 CORS 预检选项以获得更好的性能

Angular从客户端避免CORS问题

如何避免文件上传时的 CORS 预检请求?

如何避免单页应用程序中的 CORS 预检请求?

缓慢的 MySQL 查询:有没有办法避免对左连接的每一行进行条件选择计数?

options请求问题