Javascript Angular js-GET请求中阻止了跨原点请求
我有一个URL键值对列表,我正在名为Javascript Angular js-GET请求中阻止了跨原点请求,javascript,angularjs,cors,Javascript,Angularjs,Cors,我有一个URL键值对列表,我正在名为accessUrl的函数中访问它们。我们点击的URL是外部URL,不由我们维护,也就是说,我不能更改从这些URL向我们发送响应的服务器代码 http.get() var accessUrl = function(){ $.each(url, function(key, value) { $http.get(value).success(function(response,status){ $scope.status=statu
accessUrl
的函数中访问它们。我们点击的URL是外部URL,不由我们维护,也就是说,我不能更改从这些URL向我们发送响应的服务器代码
http.get()
var accessUrl = function(){
$.each(url, function(key, value)
{
$http.get(value).success(function(response,status){
$scope.status=status;
if($scope.status == "200"){
versionMap[key]=response.version;
setColor[key]='color-green';
//console.log("map "+versionMap[key]);
}
})//end of success
.error(function(err){
versionMap[key]="Down";
setColor[key]='color-red';
})//end of error
})//end of each loop
}//end of accessUrl
我正试图提出一个跨来源的请求。目前,我已将CORS扩展添加到Chrome中
我的app.js:
var express = require("express");
var app = express();
var path = require("path");
app.use("/", express.static(__dirname));
app.get('/',function(req,res){
res.sendFile(path.join(__dirname+'/index.htm'));
//__dirname : It will resolve to your project folder.
});
app.set('port', process.env.PORT);
console.log(port);
我不想再使用CORS扩展了。没有扩展,我遇到了以下错误:
已阻止跨源请求:同一源策略不允许读取
位于的远程资源(原因:CORS标头)
“访问控制允许来源”丢失)
有没有一种方法可以让我们用Angular编写代码来发出CORS请求或任何其他方法
我已经阅读了以下建议的答案:
然而,我不知道需要什么 将这些头添加到节点js服务器
var express = require("express");
var app = express();
var path = require("path");
app.use("/", express.static(__dirname));
app.get('/', function(req, res) {
res.sendFile(path.join(__dirname + '/index.htm'));
//__dirname : It will resolve to your project folder.
});
app.use(function(req, res, next) {
// Website you wish to allow to connect
res.setHeader('Access-Control-Allow-Origin', '*');
// Request methods you wish to allow
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
// Request headers you wish to allow
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
// Set to true if you need the website to include cookies in the requests sent
// to the API (e.g. in case you use sessions)
res.setHeader('Access-Control-Allow-Credentials', true);
// Pass to next layer of middleware
next();
});
app.set('port', process.env.PORT);
console.log(port);
首先在配置中插入httpProvider,然后在app.js中包含以下行
$httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';
它将像一个符咒一样工作。您可以在服务器中使用cors
库,之后您就不需要在GET/POST
请求中添加/发送任何特殊标题,只需在文件中添加以下两行:
方法1:
var cors = require('cors');
app.use(cors());
使用npm安装后:
npm install cors --save
方法2:
var cors = require('cors');
app.use(cors());
如果不想使用其他库,可以在服务器文件中手动添加头,如下所示:
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header('Access-Control-Allow-Methods', 'DELETE, PUT', 'GET', 'POST');
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
方法3:
var cors = require('cors');
app.use(cors());
如果在开发过程之前您不想编辑服务器端代码,您可以使用这个CORS
,它可以完美地完成工作。
附言:您可能必须禁用它才能访问其他网站,如google/youtube等。外部API需要说明哪个来源可以调用该API。如果您的域名未在外部API中定义,则您无法访问该API。这是安全特性。解决此问题的唯一方法是要求外部API提供商允许您的主机名
这可以使用“访问控制允许来源”标题完成。您的外部API必须发送一个标头,其中“Access Control Allow Origin”作为键,主机名作为值。没有其他方法可以绕过这一点 谢谢你的回复。很抱歉这个天真的问题,但我不确定如何在config?angular.module('myApp').config(['$httpProvider',function($httpProvider)]中插入httpProvider嘿,这并没有解决问题!感谢您的回复。然后在应用程序中包含cors并使用cors。在节点服务器上使用()您可以提供服务器端和客户端脚本吗?我会亲自实施的。谢谢你的回答。但是添加这些标题没有帮助。此外,由于我们正在到达不在服务器上的端点(我们正在进行api get调用)。我不明白添加这些标题如何改变任何事情?因为据我所知,我们的app.js仅用于呈现html页面,如果我们从托管的页面获得响应,这会有所帮助。感谢您的响应。方法1不起作用,它仍然显示相同的错误。如问题中所述,方法2是我想要逃避的。方法1对我来说很好。您是否先安装了它npm install cors--save
如果它仍然不起作用,请检查更新的方法2,您正在手动添加标题,这也应该可以正常工作。我们正在调用外部api,这不是由我们处理的!