Angular $ http在使用标头时执行了两次

时间:2016-12-29 12:44:08

标签: php angularjs http post header

我正在开发一个离子项目,我在每个POST和GET请求中使用头参数。然而,当我在Android手机上测试项目并监控通过我的Android设备进入我的服务器的所有请求时,没有任何问题。但是当我部署我的离子项目并在我的网络浏览器(Chrome Web浏览器)中进行测试时,我看到每个请求都执行了两次,(当我使用POST方法时,一个没有标题参数并且没有输入,第二个是全部请求params)。 如果没有标头参数每次都忽略请求,我已经在我的服务器中解决了它。如何防止$ http(POST和GET)的重复执行? 我在angular.config js文件中设置了这些参数。

$httpProvider.defaults.headers.common['Accept'] = 'application/json; q=0.01';
$httpProvider.defaults.headers.common['Authorization-Token'] = value;

我的PHP服务以

开头
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: Content-Type, Authorization-Token");
header('Access-Control-Max-Age: 60');
header('Access-Control-Allow-Methods: ["GET","POST"]');
header("Content-Type: application/json; charset=UTF-8");

3 个答案:

答案 0 :(得分:1)

听起来确实像OPTION一样。

它应该完成,而不是携带任何有效载荷,只是在执行实际调用之前检查资源上允许的操作(post / get / whatever)。

检查这个类似问题的答案:Angular 2 HTTP POST does an OPTIONS call

答案 1 :(得分:0)

第一个请求是预检。 这是浏览器机制的一部分。 你无法避免它。

答案 2 :(得分:0)

这一切都归结为浏览器如何管理CORS。当在JavaScript中进行非“简单”的跨域请求(即GET请求)时,浏览器将自动向指定的URL / URI发出HTTP OPTIONS请求,称为“飞行前”请求或“承诺” 。只要远程源返回HTTP状态代码200以及有关它将在响应头中接受的内容的相关详细信息,那么浏览器将继续使用原始JavaScript调用

请查看herehere