Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript CORS-使用Angular和Express的http选项错误_Javascript_Angularjs_Node.js_Http_Cors - Fatal编程技术网

Javascript CORS-使用Angular和Express的http选项错误

Javascript CORS-使用Angular和Express的http选项错误,javascript,angularjs,node.js,http,cors,Javascript,Angularjs,Node.js,Http,Cors,我正试图从Angularjs客户端向我的API发送帖子,我在另一个域中运行的服务器上有以下配置: app.use(function(req, res, next) { res.setHeader('Access-Control-Allow-Origin', '*'); res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, OPTIONS, DETELE'); res.setHeader('Access-Contr

我正试图从Angularjs客户端向我的API发送帖子,我在另一个域中运行的服务器上有以下配置:

app.use(function(req, res, next) {
  res.setHeader('Access-Control-Allow-Origin', '*');
  res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, OPTIONS, DETELE');
  res.setHeader('Access-Control-Allow-Headers', '*');
  next();
});
发送到服务器的头包括:

OPTIONS /api/authenticate HTTP/1.1
Host: xxxx.herokuapp.com
Connection: keep-alive
Access-Control-Request-Method: POST
Origin: http://127.0.0.1:5757
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36
Access-Control-Request-Headers: accept, content-type
Accept: */*
Referer: http://127.0.0.1:5757/login
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en,es;q=0.8,gl;q=0.6,pt;q=0.4
响应标题为:

HTTP/1.1 403 Forbidden
Server: Cowboy
Connection: keep-alive
X-Powered-By: Express
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, PUT, OPTIONS, DETELE
Access-Control-Allow-Headers: X-Requested-With,content-type,Authorization
Content-Type: application/json; charset=utf-8
Content-Length: 47
Etag: W/"2f-5f255986"
Date: Sun, 20 Sep 2015 19:26:56 GMT
Via: 1.1 vegur
我在Chrome控制台中得到的是:

angular.js:9814 OPTIONS http://xxxxx.herokuapp.com/api/authenticate 
XMLHttpRequest cannot load http://xxxx.herokuapp.com/api/authenticate. Response for preflight has invalid HTTP status code 403

事实上,出于安全原则,大多数浏览器不允许客户端js代码从同一主机请求资源

但是,当资源所有者通过在响应中添加跨源资源共享头来告诉客户端浏览器他的共享资源时,这是允许的

为了避免猜测标题,请使用cors包-它将为您完成所有肮脏的工作

npm install cors --save
然后:

var express = require('express')
  , cors = require('cors')
  , app = express();

app.use(cors());
就这些:)


这里的附加文档:

我知道,这个主题有点老了,但我发现您的
访问控制允许方法中有点输入错误

只是想与其他在复制和粘贴时遇到类似问题的用户分享:

Access-Control-Allow-Methods: GET, POST, PUT, OPTIONS, DETELE

DELETE

中有一个输入错误,您能向我解释一下我做错了什么以及为什么这样做吗?cors模块的功能与您相同,但您尚未定义大多数规则。您可以在这里阅读:或者检查:打开chrome并调查cors模块发送的标题,将相同的标题写入您的代码并删除cors模块。这个答案毫无帮助。顺便说一句,试试这个:npm安装cors--保存。。。cors=require('cors')-你是认真的吗?我的例子是公共基本解决方案。快速(肮脏)解决方案。这取决于您的问题是什么。您是否尝试过将cors配置放在最重要的位置(在bodyParsing、Router、methodOverride等之前)?看看这里:希望有帮助