【发布时间】:2017-03-22 16:45:43
【问题描述】:
我正在尝试从我的 angular.js 应用程序向我的服务器发送一些 HTTP 请求,但我需要解决一些 CORS 错误。
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 选项http://localhost:8000/test(匿名 函数)
423ef03a:1 XMLHttpRequest 无法加载 http://localhost:8000/test。预检响应包含无效的 HTTP 状态码 400
并且网络请求看起来像我预期的那样(HTTP 状态 400 也是预期的):
我无法想象如何解决这个问题(以及如何理解)为什么请求将在本地主机上以OPTIONS 发送并以POST 发送到远程服务器。有没有办法解决这个奇怪的问题?
【问题讨论】:
-
尝试在标题中添加 'Accept': 'application/json'
-
该 OPTIONS 是一个预检请求,由浏览器发送,因为在您的 POST 调用中设置了自定义标头;这是正常的。我认为问题在于这些标题的内容。
-
问题是对预检 (
OPTIONS) 请求的响应不成功,即 HTTP 400。这就是真正(后续)请求失败的原因。您必须确保对预检请求的响应是有效的。 -
预期的HTTP状态码
400是什么意思? -
你解决了吗?如果是的话,最好能描述一下为什么您的网络服务器或应用程序会为
OPTIONS请求返回 HTTP 400 以及您是如何解决它的。例如,您可以为此创建另一个答案。
标签: javascript php angularjs http cors