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实现的一个简单聊天室功能分享
Dec 06 NodeJs
NodeJS中Buffer模块详解
Jan 07 NodeJs
使用NodeJs 开发微信公众号(三)微信事件交互实例
Mar 02 NodeJs
nodejs批量下载图片的实现方法
May 19 NodeJs
NodeJS 实现手机短信验证模块阿里大于功能
Jun 19 NodeJs
docker中编译nodejs并使用nginx启动
Jun 23 NodeJs
Nodejs模块载入运行原理
Feb 23 NodeJs
nodejs中函数的调用实例详解
Oct 31 NodeJs
Nodejs中的require函数的具体使用方法
Apr 02 NodeJs
nodejs一个简单的文件服务器的创建方法
Sep 13 NodeJs
linux 下以二进制的方式安装 nodejs
Feb 12 NodeJs
nodejs制作小爬虫功能示例
Feb 24 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
PHP垃圾回收机制简单说明
2010/07/22 PHP
php中数组首字符过滤功能代码
2012/07/31 PHP
PHP防盗链的基本思想 防盗链的设置方法
2015/09/25 PHP
PHP中子类重载父类的方法【parent::方法名】
2016/05/06 PHP
一个可以随意添加多个序列的tag函数
2009/07/21 Javascript
js和jquery中循环的退出和继续下一个循环
2014/09/03 Javascript
Node.js异步I/O学习笔记
2014/11/04 Javascript
去除html代码里面的script正则方法
2016/05/19 Javascript
JavaScript实现url参数转成json形式
2016/09/25 Javascript
ES6新特性二:Iterator(遍历器)和for-of循环详解
2017/04/20 Javascript
jquery实现图片上传前本地预览
2017/04/28 jQuery
使用bootstrap插件实现模态框效果
2017/05/10 Javascript
seajs模块压缩问题与解决方法实例分析
2017/10/10 Javascript
Node实战之不同环境下配置文件使用教程
2018/01/02 Javascript
js 取消页面可以选中文字的功能方法
2018/01/02 Javascript
浅析Visual Studio Code断点调试Vue
2018/02/27 Javascript
了解javascript中let和var及const关键字的区别
2019/05/24 Javascript
js实现GIF动图分解成多帧图片上传
2019/10/24 Javascript
微信小程序如何获取地址
2019/12/24 Javascript
JavaScript 严格模式(use strict)用法实例分析
2020/03/04 Javascript
Python获取Windows或Linux主机名称通用函数分享
2014/11/22 Python
Python中实现结构相似的函数调用方法
2015/03/10 Python
在Python中操作字符串之startswith()方法的使用
2015/05/20 Python
Python计算两个日期相差天数的方法示例
2017/05/23 Python
Flask框架实现给视图函数增加装饰器操作示例
2018/07/16 Python
python 实现提取某个索引中某个时间段的数据方法
2019/02/01 Python
Python迭代器Iterable判断方法解析
2020/03/16 Python
电气技术员岗位职责
2013/11/19 职场文书
环境工程专业自荐信范文
2014/03/18 职场文书
关于读书的演讲稿
2014/05/07 职场文书
安全标语大全
2014/06/10 职场文书
志愿者活动总结报告
2014/06/27 职场文书
派出所副所长四风问题个人整改措施思想汇报
2014/10/13 职场文书
学校开除通知书
2015/04/25 职场文书
看古人们是如何赞美老师的?
2019/07/08 职场文书
vue el-table实现递归嵌套的示例代码
2022/08/14 Vue.js