• node.js配置允许跨域请求,设置允许携带的请求头参数


    最近在用node.js写自己的后台时遇见了跨域问题,之前处理跨域都是在前端配置代理解决的,这次打算在后台解决,中途也遇
    到了一些坑,比如我在请求头里加了一个自定义的参数token,结果后台配置的时候没有允许请求能够携带该参数,造成预检请求
    发出后,就没任何响应了。为此折腾了半天才发现问题。。。还是对它不够了解,所以查阅了相关资料,下面做出自己的理解:

    都知道跨域是因为浏览器的同源策略造成的,当客户端访问服务端时,如果两端的ip、端口、协议任意一个不同就会产生跨域。
    下面介绍node.js后台如何配置允许跨域访问:

    如果产生了跨域,客服端在访问服务端时,除了get请求外,其它请求都会先向客户端发送一个为 OPTIONS 的预检请求(预请求),
    该请求到达服务端后,服务端会判断是否允许该请求继续访问,下面贴出我在node.js中如何配置的跨域中间件:

    我是用的是express框架,在app.js中配置允许跨域(把这段代码放在你的其它中间件之前,如果对您有帮助请帮我点个赞喔(* ̄︶ ̄) ):

    // 配置跨域请求中间件(服务端允许跨域请求)
    var allowCors = function(req, res, next) {
        res.header("Access-Control-Allow-Origin", req.headers.origin); // 设置允许来自哪里的跨域请求访问(req.headers.origin为当前访问来源的域名与端口)
        res.header("Access-Control-Allow-Methods", "GET,PUT,POST,DELETE,OPTIONS"); // 设置允许接收的请求类型
        res.header("Access-Control-Allow-Headers", "Content-Type,request-origin"); // 设置请求头中允许携带的参数
        res.header("Access-Control-Allow-Credentials", "true"); // 允许客户端携带证书式访问。保持跨域请求中的Cookie。注意:此处设true时,Access-Control-Allow-Origin的值不能为 '*'
        res.header("Access-control-max-age", 1000); // 设置请求通过预检后多少时间内不再检验,减少预请求发送次数
        next();
    };
    app.use(allowCors); // 使用跨域中间件





  • 相关阅读:
    洛谷P5661 公交换乘(二分)
    洛谷P4047 [JSOI2010]部落划分(最小生成树)
    洛谷P2872 [USACO07DEC]Building Roads S(最小生成树)
    卸载重装VirtualBox回滚报错
    POJ1151 Atlantis(扫描线+线段树+离散化)
    QT入门-信号槽拓展
    Vue模板语法与常用指令总结
    Vue 生命周期
    querySelector和getElementById方法的区别
    ES6 Class(类)的继承与常用方法
  • 原文地址:https://www.cnblogs.com/maxiansheng/p/12524348.html
Copyright © 2020-2023  润新知