NodeJS配置CORS实现过程详解


Posted in NodeJs onDecember 02, 2020

跨域问题主要在header上下功夫

首先提供一个w3c的header定义 http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

再提供一个网友提供的header详解 http://kb.cnblogs.com/page/92320/

这两个有助于帮助大家理解header的类型和作用, 但是遗憾的是跨域相关的两个header属性我都没有找到相关的定义,

下面直接告诉大家 1是Access-Control-Allow-Origin 允许的域 2是Access-Control-Allow-Headers 允许的header类型

第一项可以直接设为* 表示任意 但是第二项不能这样写,在chrome中测试跨域发现报错, 最终的代码看起来是这个样子:

app.all('*', function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Content-Type,Content-Length, Authorization, Accept,X-Requested-With");
  res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
  res.header("X-Powered-By",' 3.2.1')
  if(req.method=="OPTIONS") res.send(200);/*让options请求快速返回*/
  else next();
});

另外有cors模块可以用

CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE浏览器不能低于IE10。

整个CORS通信过程,都是浏览器自动完成,不需要用户参与。对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样。浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉。

因此,实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以跨源通信。

浏览器将CORS请求分成两类:简单请求(simple request)和非简单请求(not-so-simple request)。

只要同时满足以下两大条件,就属于简单请求。

(1) 请求方法是以下三种方法之一:

  • HEAD
  • GET
  • POST

(2)HTTP的头信息不超出以下几种字段:

  • Accept
  • Accept-Language
  • Content-Language
  • Last-Event-ID

Content-Type:只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain

这是为了兼容表单(form),因为历史上表单一直可以发出跨域请求。AJAX 的跨域设计就是,只要表单可以发,AJAX 就可以直接发。

凡是不同时满足上面两个条件,就属于非简单请求。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

NodeJs 相关文章推荐
nodejs中exports与module.exports的区别详细介绍
Jan 14 NodeJs
nodejs文件操作模块FS(File System)常用函数简明总结
Jun 05 NodeJs
nodejs开发环境配置与使用
Nov 17 NodeJs
nodejs中实现路由功能
Dec 29 NodeJs
手把手教你把nodejs部署到linux上跑出hello world
Jun 19 NodeJs
nodeJS(express4.x)+vue(vue-cli)构建前后端分离实例(带跨域)
Jul 05 NodeJs
nodeJS微信分享
Dec 20 NodeJs
nodejs前端模板引擎swig入门详解
May 15 NodeJs
nodejs实现套接字服务功能详解
Jun 21 NodeJs
nodejs实现用户登录路由功能
May 22 NodeJs
nodejs对mongodb数据库的增加修删该查实例代码
Jan 05 NodeJs
在nodejs中创建child process的方法
Jan 26 NodeJs
如何利用nodejs自动定时发送邮件提醒(超实用)
Dec 01 #NodeJs
nodeJs项目在阿里云的简单部署
Nov 27 #NodeJs
如何利用nodejs实现命令行游戏
Nov 24 #NodeJs
NodeJS模块Buffer原理及使用方法解析
Nov 11 #NodeJs
nodejs中内置模块fs,path常见的用法说明
Nov 07 #NodeJs
Nodejs + sequelize 实现增删改查操作
Nov 07 #NodeJs
nodejs+koa2 实现模仿springMVC框架
Oct 21 #NodeJs
You might like
做个自己站内搜索引擎
2006/10/09 PHP
解决GD中文乱码问题
2007/02/14 PHP
php中通过虚代理实现延迟加载的实现代码
2011/06/10 PHP
YII路径的用法总结
2014/07/09 PHP
php获取当前月与上个月月初及月末时间戳的方法
2016/12/05 PHP
CodeIgniter框架钩子机制实现方法【hooks类】
2018/08/21 PHP
javascript 写类方式之三
2009/07/05 Javascript
jquery 日期分离成年月日的代码
2010/05/14 Javascript
javascript学习笔记(二)数组和对象部分
2014/09/30 Javascript
jQuery实现当前页面标签高亮显示的方法
2015/03/10 Javascript
自动适应iframe右边的高度
2016/12/22 Javascript
vue服务端渲染的实例代码
2017/08/28 Javascript
antd-mobile ListView长列表的数据更新遇到的坑
2020/04/08 Javascript
vue项目前端微信JSAPI与外部H5支付相关实现过程及常见问题
2020/04/14 Javascript
javascript实现前端input密码输入强度验证
2020/06/24 Javascript
[04:03]DOTA2英雄梦之声_第02期_风暴之灵
2014/06/30 DOTA
用Python编写一个简单的俄罗斯方块游戏的教程
2015/04/03 Python
Python2.7基于笛卡尔积算法实现N个数组的排列组合运算示例
2017/11/23 Python
python类的方法属性与方法属性的动态绑定代码详解
2017/12/27 Python
python 将有序数组转换为二叉树的方法
2019/03/26 Python
python中的数据结构比较
2019/05/13 Python
python两个_多个字典合并相加的实例代码
2019/12/26 Python
雪花秀美国官方网站:韩国著名草本护肤化妆品品牌
2016/10/19 全球购物
美国围栏公司:Walpole Outdoors
2019/11/19 全球购物
英国女性化妆品收纳和家具网站:Beautify
2019/12/07 全球购物
伦敦鲜花递送:Flower Station
2021/02/03 全球购物
EJB的角色和三个对象
2015/12/31 面试题
机电一体化专业推荐信
2013/12/03 职场文书
办理居住证介绍信
2014/01/15 职场文书
运动会邀请函范文
2014/02/06 职场文书
奠基仪式策划方案
2014/05/15 职场文书
争先创优心得体会
2014/09/12 职场文书
2015年出纳个人工作总结
2015/04/02 职场文书
关于调整工作时间的通知
2015/04/24 职场文书
导游词之江南园林狮子林
2019/09/16 职场文书
导游词之天下银坑景区
2019/11/21 职场文书