加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

nodejs express 允许跨域访问(Access-Control-Allow-Origin)

发布时间:2020-12-16 18:57:15 所属栏目:百科 来源:网络整理
导读:前世今生 在WEB应用普及的今天,个人信息(账号、COOKIE等)广泛应用于网页。浏览器 同源策略 保证了WEB环境的安全性。同源策略是说,在a.com域名下通过ajax或者XmlHttpRequest等方式访问b.com的资源时,是不被允许的。 然而在很多时候,出于业务的的需要,

前世今生

在WEB应用普及的今天,个人信息(账号、COOKIE等)广泛应用于网页。浏览器同源策略保证了WEB环境的安全性。同源策略是说,在a.com域名下通过ajax或者XmlHttpRequest等方式访问b.com的资源时,是不被允许的。

然而在很多时候,出于业务的的需要,我们经常有类似的跨域访问 的需求。浏览器有一些支持跨域访问的标签,例如script,img等。有这样的需求,自然就衍生了一些解决办法。

比较普遍的是通过jsonp的方式来实现接口。

另外一个方式就是在服务器端配置,允许部分或者所有页面进行跨域访问。

JSONP方式

简单来说,jsonp返回的不是json数据,而且一段通过函数将json数据包起来的js代码。这样,就可以通过script标签来加载这段代码,实现任意服务器的访问。
对于如下一个返回json数据的接口:

http://www.test.com/jsonServerResponse

其对应的jsonp方式的用法如下,其中jsonpCallback是客户端实现的处理json数据的函数。

<script>
    var data;
    function jsonpCallback(result) {
        data = result;
    }
</script> <script src="http://www.test.com/jsonServerResponse?callback=jsonpCallback"></script>

前端页面在调用接口时,需要以callback=jsonpCallback的形式,将本地实现的处理json数据的函数上传到服务器。跨域服务器实现相应的jsonp接口

http://www.test.com/jsonServerResponse?callback=jsonpCallback

这个接口的返回数据如下

jsonpCallback({'msg':'this is json data'});

可以看出,关键得在服务器端实现jsonp方式的接口,有了这些,客户端就可以自由的跨域了!

服务器端

另外一个办法,直接在服务器端,允许某些来源、某些接口、某些方法以某些形式被跨域调用。

nodejs express配置

app.all('/test',function(req,res,next) {
    res.header("Access-Control-Allow-Origin","*");
    res.header('Access-Control-Allow-Methods','PUT,GET,POST,DELETE,OPTIONS');
    res.header("Access-Control-Allow-Headers","X-Requested-With");
    res.header('Access-Control-Allow-Headers','Content-Type');
    next();
});

nginx配置

然而添加了这些之后,仍然不好使。查了查,可能是要在nginx上也作设置,在nginx相应路径添加如下:

location ^~ /test {
    add_header 'Access-Control-Allow-Origin' '*';
    add_header 'Access-Control-Allow-Credentials' 'true';
    add_header 'Access-Control-Allow-Methods' 'OPTION,GET';
    add_header 'Access-Control-Allow-Headers' 'X-Requested-With,Content-Type';
}

之后重新加载nginx配置即可,大功告成。

更多关于跨域的讨论,欢迎留言!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读