我正在使用 Postman Chrome扩展程序对服务进行 POST ,我得到了预期的响应。
但是,当我使用$http
执行相同的 POST 请求时,一切都会变成地狱。
我得到了:
Request header field Engaged-Auth-Token is not allowed by Access-Control-Allow-Headers
Engaged-Auth-Token
是标题。
我不知道为什么Postman有效并且它不能与Chrome合作......
有什么想法吗?
答案 0 :(得分:7)
我认为在CLIENT上配置$ httpProvider上的 Access-Control-Allow-Headers 是行不通的。我认为需要在服务器上配置标头(作为响应标头)。例如,在一个node-express应用程序中,这可以通过中间件(例如)完成,放置如下内容:
res.header('*')
或(更有选择性地)您需要的标题:
res.header('Engaged-Auth-Token, Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With');
答案 1 :(得分:1)
问题是因为请求标头中缺少Access-Control-Allow-Headers
。要解决此问题,我们需要将Access-Control-Allow-Headers: *
添加到请求标头
向Access-Control-Allow-Headers
添加http request header
。您可以使用$httpProvider
在应用级别执行此操作。在您的应用配置部分添加以下行以添加此标头。
var app = angular.module("app", [
"ngRoute",
"app.controllers",
"app.directives",
"app.filters"
]);
app.config([
"$routeProvider",
"$httpProvider",
function($routeProvider, $httpProvider){
$httpProvider.defaults.headers.common['Access-Control-Allow-Headers'] = '*';
}
]);
答案 2 :(得分:0)
如果在后端使用sails api更改cors.js并在此处添加您的令牌
module.exports.cors = {
allRoutes: true,
origin: '*',
credentials: true,
methods: 'GET, POST, PUT, DELETE, OPTIONS, HEAD',
headers: 'Origin, X-Requested-With, Content-Type, Accept, Engaged-Auth-Token'
};