位置: 编程技术 - 正文

Node.js设置CORS跨域请求中多域名白名单的方法(node.js可以跨平台吗)

编辑:rootadmin

推荐整理分享Node.js设置CORS跨域请求中多域名白名单的方法(node.js可以跨平台吗),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:nodejs collaborator,nodejs co,node.js可以跨平台吗,node设置跨域,node设置跨域,nodejs cors,node跨域cors,nodejs设置跨域,内容如对您有帮助,希望把文章链接给更多的朋友!

CORS

说到CORS,相信前端儿都不陌生,这里我就不多说了,具体可以看看这篇文章。

CORS,主要就是配置Response响应头中的 Access-Control-Allow-Origin 属性为你允许该接口访问的域名。最常见的设置是:

然而,这样的设置是最简单粗暴,同时也是最不安全的。它表示该接口允许所有的域名对它进行跨域请求。然而,在一般实际业务中,都希望该接口只允许对某一个或几个网站开放跨域请求权限,而非全部。

那么,聪明的你肯定想着,多域名白名单还不简单吗,写个正则就好啦?再不行,直接配置 Access-Control-Allow-Origin 属性为用逗号分隔的多个域名不就好了吗?

就像下面这样:

很遗憾地告诉你,这样的写法是无效的。在Node.js中,res的响应头Header中的 Access-Control-Allow-Origin 属性不能匹配除 (*) 以外的正则表达式的,域名之间不能也用逗号分隔。也就是说, Access-Control-Allow-Origin 的属性值只允许设置为单个确定域名字符串或者 (*)。

Node.js设置CORS跨域请求中多域名白名单的方法(node.js可以跨平台吗)

既然我们希望允许的是多个域名,也不愿意使用不安全的 * 通配符,难道就真不能配置多域名白名单的CORS了吗?

多域名白名单的CORS确实是可以实现的。只是有一点曲线救国的味道。

多域名白名单的CORS实现原理

具体原理可以参考cors库的核心代码:

实现原理是这样的:

既然 Access-Control-Allow-Origin 属性已经明确不能设置多个域名,那么我们只得放弃这条路了。

最流行也是最有效的方法就是,在服务器端判断请求的Header中Origin属性值(req.header.origin)是否在我们的域名白名单列表内。如果在白名单列表内,那么我们就把 Access-Control-Allow-Origin 设置成当前的Origin值,这样就满足了Access-Control-Allow-Origin 的单一域名要求,也能确保当前请求通过访问;如果不在白名单列表内,则返回错误信息。

这样,我们就把跨域请求的验证,从浏览器端转移到服务端来了。对Origin字符串的验证就变成了相当于常规字符串的验证,我们不仅可以使用数组列表验证,还可以使用正则匹配。

具体代码如下:

Oh yeah,简直完美~

总结

标签: node.js可以跨平台吗

本文链接地址:https://www.jiuchutong.com/biancheng/377899.html 转载请保留说明!

上一篇:Restify中接入Socket.io报Error:Can’t set headers的错误解决(socket restful)

下一篇:nodejs模块nodemailer基本使用-邮件发送示例(支持附件)(nodejs模块有哪些)

  • 企业所得税的计提
  • 个体户需要做利润分析吗
  • 增值税进项发票网上勾选平台
  • 不单独计价的包装物是什么意思
  • 企业所得税零申报表怎么填写
  • 税控盘清卡失败
  • 带清单的发票怎么贴原始凭证
  • 小型微利企业申请
  • 注册资本余额为100万亿元
  • 每个月0申报,对企业有什么影响吗?
  • 现金预算表制造费用怎么填
  • 母公司为子公司担保是利好还是利空
  • 差旅费应纳入社保缴费基数吗?
  • 企业受托开发软件是什么
  • 其他综合收益包含哪些科目
  • 何为自然人股东
  • 增值税应交税费科目
  • 现金支付和个人自费
  • 所得税汇算清缴扣除标准
  • 其他综合收益可以转损益的情况
  • 收到境外公司服务费
  • 电子发票报销有什么用
  • 机票的进项
  • 哪些行业需要缴纳水利建设基金
  • 公司长期贷款
  • 电脑找不到ie浏览器
  • 公司注销退回投资款如何账务处理
  • php函数返回值类型
  • 桌面小工具怎么添加
  • 印花税计提缴纳时间
  • PHP:pg_send_query_params()的用法_PostgreSQL函数
  • 微博怎么变成大v
  • 土地承包经营权和土地经营权区别
  • 预缴和清缴的会计科目
  • php sha1加密 解密
  • python如何编写函数
  • 个体户怎么报增值税
  • 物权变动的原因是什么
  • mysql修改表结构会锁表吗
  • 买汽车计算公式
  • 收到生育津贴入什么科目
  • 两个日期是否一致
  • 物业公司物业费计入什么会计科目
  • 租房合同 陷阱
  • 预期报酬率和期初报酬率
  • 独立法人企业关系怎么写
  • 融资租赁固定资产折旧年限
  • 工程咨询服务发展指导意见坚持市场培优的原则
  • 生产企业购进的生产原材料用来装修公司会计处理
  • 合伙企业一般纳税人六税两费
  • 刻章需要准备的资料
  • 合伙企业有限合伙
  • 融资租赁的计算方法有哪些
  • 资产减值损失和资产减值准备的区别
  • 自产商品无偿赠送是否确认收入
  • 企业注销固定资产清理税务处理
  • 小微企业和小规模纳税人的区别
  • mysql 基本操作
  • 阿里云 mybase
  • win8应用商店废了
  • linux怎么调整屏幕大小
  • WebProxy.exe - WebProxy是什么进程
  • agentctl.dll
  • zmweb.exe是什么进程
  • win10一直重置
  • 基于stm32的100个毕业设计
  • cocos2d-x教程
  • 基于javascript的毕业设计
  • jQuery插件能输出到控制台
  • linux shell脚本编写1加100
  • 后台运行bat定时器程序示例分享
  • rgb与yuv哪个好
  • unity openvr
  • 批处理图像
  • jQuery通过ajax快速批量提交表单数据
  • python三种类型
  • js 工作流
  • 深圳海吉星管理处电话
  • 如何计算环保税减征政策
  • 加油账单怎么查询
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设