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读取memcache示例分享
Jan 02 NodeJs
Nodejs异步回调的优雅处理方法
Sep 25 NodeJs
NodeJS Web应用监听sock文件实例
Feb 18 NodeJs
快速掌握Node.js之Window下配置NodeJs环境
Mar 21 NodeJs
NodeJs下的测试框架Mocha的简单介绍
Feb 22 NodeJs
搭建简单的nodejs http服务器详解
Mar 09 NodeJs
win系统下nodejs环境安装配置
May 04 NodeJs
Nodejs回调加超时限制两种实现方法
Jun 09 NodeJs
NodeJs搭建本地服务器之使用手机访问的实例讲解
May 12 NodeJs
Nodejs 发布自己的npm包并制作成命令行工具的实例讲解
May 15 NodeJs
nodejs初始化init的示例代码
Oct 10 NodeJs
nodejs对mongodb数据库的增加修删该查实例代码
Jan 05 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 文件上传源码分析(RFC1867)
2009/10/30 PHP
把1316这个数表示成两个数的和,其中一个为13的倍数,另一个是11的倍数,求这两个数。
2011/06/24 PHP
php生成mysql的数据字典
2016/07/07 PHP
JavaScript实现删除电脑的关机键
2016/07/26 PHP
PHP切割汉字的常用方法实例总结
2019/04/27 PHP
JavaScript触发器详解
2007/03/10 Javascript
javascript模拟select,jselect的方法实现
2012/11/08 Javascript
jQuery jcrop插件截图使用方法
2013/11/20 Javascript
JavaScript在for循环中绑定事件解决事件参数不同的情况
2014/01/20 Javascript
web前端设计师们常用的jQuery特效插件汇总
2014/12/07 Javascript
JQuery中绑定事件(bind())和移除事件(unbind())
2015/02/27 Javascript
常用DOM整理
2015/06/16 Javascript
轻松学习jQuery插件EasyUI EasyUI实现树形网络基本操作(2)
2015/11/30 Javascript
Javascript 字符串模板的简单实现
2016/02/13 Javascript
jquery插件jquery.dragscale.js实现拖拽改变元素大小的方法(附demo源码下载)
2016/02/25 Javascript
JS只能输入正整数的简单实例
2016/10/07 Javascript
Javascript 实现全屏滚动实例代码
2016/12/31 Javascript
微信小程序模板和模块化用法实例分析
2017/11/28 Javascript
vue 使用ref 让父组件调用子组件的方法
2018/02/08 Javascript
JS获取指定月份的天数两种实现方法
2018/06/22 Javascript
在element-ui的el-tree组件中用render函数生成el-button的实例代码
2018/11/05 Javascript
js图片无缝滚动插件使用详解
2020/05/26 Javascript
python3.5实现socket通讯示例(TCP)
2017/02/07 Python
python实现flappy bird游戏
2018/12/24 Python
如何在 Django 模板中输出 "{{"
2020/01/24 Python
纯CSS3实现8组超炫酷鼠标滑过图片动画
2016/03/16 HTML / CSS
乌克兰香水和化妆品网站:Notino.ua
2018/03/26 全球购物
世界领先的艺术图书出版社:TASCHEN
2018/07/23 全球购物
资深财务管理人员自我评价
2013/09/22 职场文书
人事经理岗位职责
2014/04/28 职场文书
工程售后服务承诺书
2014/05/21 职场文书
违反单位工作制度检讨书
2014/10/25 职场文书
生产现场禁烟通知
2015/04/23 职场文书
小学教研工作总结2015
2015/05/13 职场文书
2015年药品销售工作总结范文
2015/05/25 职场文书
丧事主持词
2015/07/02 职场文书