使用以下代码进行 HTTP 请求:
functions.test = function(foo, bar) {
return $http({
method: 'POST',
url: api_endpoint + 'test',
headers: {
'foo': 'value',
'content-type': 'application/json'
},
data: {
bar:'value'
}
});
};
第一次尝试遇到了一些CORS错误。因此,在我的PHP脚本中添加了以下几行:
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE, PUT');
header('Access-Control-Allow-Headers: X-Requested-With, Content-Type, Origin, Authorization, Accept, Client-Security-Token, Accept-Encoding, X-Auth-Token, content-type');
第一个错误已经被消除。
现在Chrome的开发者工具显示以下错误:
angular.js:12011 OPTIONS http://localhost:8000/test (匿名函数)
423ef03a:1 XMLHttpRequest无法加载http://localhost:8000/test。 预检请求的响应无效,HTTP状态码为400
网络请求看起来符合预期(HTTP状态400
也是预期的):
我无法想象如何解决这个问题(以及如何理解),为什么请求会作为OPTIONS
发送到本地主机,而作为POST
发送到远程服务器。是否有解决此奇怪问题的方法?
OPTIONS
)请求的响应不成功,即HTTP 400。这就是为什么真正的(以下)请求失败的原因。您必须确保对预检请求的响应有效。 - David Ferenczy Rogožan