300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > ajax 解决跨域cors express解决ajax与angular跨域CORS权限与session问题

ajax 解决跨域cors express解决ajax与angular跨域CORS权限与session问题

时间:2023-03-15 08:54:40

相关推荐

ajax 解决跨域cors express解决ajax与angular跨域CORS权限与session问题

简介

CORS(跨域资源共享),是由于浏览器的通源策略(Same Origin Policy),限制了来自不同源的'document'或脚本,以便保证浏览器安全。

当使用ajax跨域请求时,浏览器提示:XmlHttpRequest error: Origin null is not allowed by Access-Control-Allow-Origin。

因此,解决CORS关键在于设置后台服务器接收并允许来自不同源的请求。

服务器配置

express添加CORS许可

app.use(function(req, res, next){

//设置可访问的域名 in为nodejs下获取访问的域名地址

res.header("Access-Control-Allow-Origin", req.headers.origin);

//设置可访问方法名

res.header('Access-Control-Allow-Methods', req.headers['Access-Control-Allow-Methods']);

//设置可访问的头

res.header('Access-Control-Allow-Headers', req.headers['access-control-request-headers']);

//设置cookie时长

res.header("Access-Control-Max-Age","1728000");

//允许凭证,解决session跨域丢失问题

res.header('Access-Control-Allow-Credentials', 'true');

next();

});

前台配置

js ajax请求

$.ajax({

url: 'xxx',//提交地址

method: 'xxx',//方式

data: 'phone=xxx&password=xxx,//数据

xhrFields: {

withCredentials: true//设置允许凭证

},

success: function(data){

console.log(data);

}

})

angularjs $http

1.配置angularjs

app.config(function($httpProvider) {

//允许跨域请求

$httpProvider.defaults.useXDomain = true;

//删除用于识别ajax调用的XMLHttpRequests头,防止拦截CORS

delete $httpProvider.mon['X-Requested-With'];

});

2.$http请求

$http({

url: "xxx", //请求地址

method: "xxx",//方式

data: {phone:"xxx",password:"xxx"},//数据

withCredentials: true,//是否允许凭证,与ajax的略有不通,请注意

}).success(function(data){

console.log(data);

})

});

总结

CORS在很多场景下都是必须解决的问题,尤其是RESTful API。此外,在处理浏览器同源策略时候,要注意Access-Control-Allow-Origin的接收范围,尽量使用白名单的方式来准确允许不同源访问,设置*可能会导致XSS或者CSRF等网站攻击漏洞。

happy joining!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。