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(一)--- Node.js简介及安装开发环境
May 20 NodeJs
基于NodeJS的前后端分离的思考与实践(四)安全问题解决方案
Sep 26 NodeJs
nodejs中转换URL字符串与查询字符串详解
Nov 26 NodeJs
nodejs实现获取当前url地址及url各种参数值
Jun 25 NodeJs
nodejs爬虫抓取数据之编码问题
Jul 03 NodeJs
详解nodejs通过代理(proxy)发送http请求(request)
Sep 22 NodeJs
使用nodeJs来安装less及编译less文件为css文件的方法
Nov 20 NodeJs
利用nodeJs anywhere搭建本地服务器环境的方法
May 12 NodeJs
nodejs 使用nodejs-websocket模块实现点对点实时通讯
Nov 28 NodeJs
详解nodejs解压版安装和配置(带有搭建前端项目脚手架)
Dec 06 NodeJs
nodejs读取图片返回给浏览器显示
Jul 25 NodeJs
nodejs如何在package.json中设置多条启动命令
Mar 16 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
全国FM电台频率大全 - 26 西藏自治区
2020/03/11 无线电
PHP中类属性与类静态变量的访问方法示例
2016/07/13 PHP
PHP实现QQ、微信和支付宝三合一收款码实例代码
2018/02/19 PHP
js 第二代身份证号码的验证机制代码
2011/05/12 Javascript
js 编码转换 gb2312 和 utf8 互转的2种方法
2013/08/07 Javascript
图片翻转效果具体实现代码
2014/01/09 Javascript
node.js中的fs.mkdir方法使用说明
2014/12/17 Javascript
jquery实现submit提交表单
2015/02/03 Javascript
JavaScript 变量、作用域及内存
2015/04/08 Javascript
javascript+html5实现绘制圆环的方法
2015/07/28 Javascript
jQuery 3 中的新增功能汇总介绍
2016/06/12 Javascript
JavaScript原生节点操作小结
2017/01/17 Javascript
JavaScript、C# URL编码、解码总结
2017/01/21 Javascript
MUI  Scroll插件的使用详解
2017/04/13 Javascript
详解Node.js 命令行程序开发教程
2017/06/07 Javascript
微信小程序使用navigateTo数据传递的实例
2017/09/26 Javascript
Angular数据绑定机制原理
2018/04/17 Javascript
Angular如何在应用初始化时运行代码详解
2018/06/11 Javascript
使用vue2实现带地区编号和名称的省市县三级联动效果
2018/11/05 Javascript
python异步任务队列示例
2014/04/01 Python
Python面向对象编程基础解析(二)
2017/10/26 Python
Python实现微信好友的数据分析
2019/12/16 Python
Python3.7下安装pyqt5的方法步骤(图文)
2020/05/12 Python
python 利用toapi库自动生成api
2020/10/19 Python
美国知名的时尚购物网站:Anthropologie
2016/12/22 全球购物
Champion官网:美国冠军运动服装
2017/01/25 全球购物
香港交友网站:be2香港
2018/07/22 全球购物
Lime Crime官网:美国一家主打梦幻精灵系的彩妆品牌
2019/03/22 全球购物
马来西亚排名第一的宠物用品店:Pets Wonderland
2020/04/16 全球购物
Shell编程面试题
2016/05/29 面试题
小溪流的歌教学反思
2014/02/13 职场文书
旷课检讨书范文
2015/01/27 职场文书
员工工作表扬信
2015/05/05 职场文书
物资采购管理制度
2015/08/06 职场文书
Python如何使用logging为Flask增加logid
2021/03/30 Python
Nginx实现负载均衡的项目实践
2022/03/18 Servers