zoukankan      html  css  js  c++  java
  • 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); // 使用跨域中间件





  • 相关阅读:
    繁体解决方案一,ASP,JSP,PHP,DotNet任何开发通用
    18.观察者模式(Observer Pattern)
    存储过程小技巧(2)从动态查询SQL中返回值给变量
    DotNet学习
    询问:有没有用C#写的C/S模式下的网页编辑工具
    dotNet繁体解决方案
    svn感叹号大全
    svn中出现红色感叹号
    Varnish配置,Error 503解决之道
    varnish清除缓存的方法
  • 原文地址:https://www.cnblogs.com/maxiansheng/p/12524348.html
Copyright © 2011-2022 走看看