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获取本机内网和外网ip地址的实现代码
Jun 01 NodeJs
我的NodeJs学习小结(一)
Jul 06 NodeJs
nodejs中实现sleep功能实例
Mar 24 NodeJs
Nodejs基于LRU算法实现的缓存处理操作示例
Mar 17 NodeJs
详解nodejs的express如何自动生成项目框架
Jul 12 NodeJs
详解Nodejs 通过 fs.createWriteStream 保存文件
Oct 10 NodeJs
nodejs爬虫初试superagent和cheerio
Mar 05 NodeJs
nodejs aes 加解密实例
Oct 10 NodeJs
nodejs图片处理工具gm用法小结
Dec 12 NodeJs
深入理解nodejs搭建静态服务器(实现命令行)
Feb 05 NodeJs
nodejs简单抓包工具使用详解
Aug 23 NodeJs
nodejs语言实现验证码生成功能的示例代码
Oct 13 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 smarty模版引擎中的缓存应用
2009/12/02 PHP
PHP OPCode缓存 APC详细介绍
2010/10/12 PHP
PHP的简易冒泡法代码分享
2012/08/28 PHP
在Mac OS的PHP环境下安装配置MemCache的全过程解析
2016/02/15 PHP
php版微信自动登录并获取昵称的方法
2016/09/23 PHP
PHP实现批量重命名某个文件夹下所有文件的方法
2017/09/04 PHP
javascript中取前n天日期的两种方法分享
2014/01/26 Javascript
js使用removeChild方法动态删除div元素
2014/08/01 Javascript
浅析javascript操作 cookie对象
2014/12/26 Javascript
AngularJS页面访问时出现页面闪烁问题的解决
2016/03/06 Javascript
基于jQuery Tipso插件实现消息提示框特效
2016/03/16 Javascript
javascript之Boolean类型对象
2016/06/07 Javascript
原生js仿jquery animate动画效果
2016/07/13 Javascript
Node.js中路径处理模块path详解
2016/11/14 Javascript
Bootstrap的popover(弹出框)在append后弹不出(失效)
2017/02/27 Javascript
微信小程序 空白页重定向解决办法
2017/06/27 Javascript
Vue.js实现按钮的动态绑定效果及实现代码
2017/08/21 Javascript
解决 window.onload 被覆盖的问题方法
2020/01/14 Javascript
js 函数性能比较方法
2020/08/24 Javascript
SpringBoot+Vue 前后端合并部署的配置方法
2020/12/30 Vue.js
[01:28:56]2014 DOTA2华西杯精英邀请赛 5 24 CIS VS DK
2014/05/26 DOTA
pycharm中连接mysql数据库的步骤详解
2017/05/02 Python
numpy排序与集合运算用法示例
2017/12/15 Python
Python实现JSON反序列化类对象的示例
2018/01/31 Python
Python一键安装全部依赖包的方法
2019/08/12 Python
python编写计算器功能
2019/10/25 Python
python爬虫之遍历单个域名
2019/11/20 Python
python实现布隆过滤器及原理解析
2019/12/08 Python
python实现3D地图可视化
2020/03/25 Python
社区十八大感言
2014/01/19 职场文书
募捐倡议书怎么写
2014/05/14 职场文书
个人承诺书格式
2014/06/03 职场文书
学习十八大演讲稿
2014/09/15 职场文书
介绍信的写法
2015/01/31 职场文书
MySQL悲观锁与乐观锁的实现方案
2021/11/02 MySQL
python 详解turtle画爱心代码
2022/02/15 Python