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学习小结(一)
Jul 06 NodeJs
基于NodeJS的前后端分离的思考与实践(三)轻量级的接口配置建模框架
Sep 26 NodeJs
轻松创建nodejs服务器(10):处理POST请求
Dec 18 NodeJs
NodeJS学习笔记之(Url,QueryString,Path)模块
Jan 13 NodeJs
nodejs简单实现中英文翻译
May 04 NodeJs
详解Nodejs的timers模块
Dec 22 NodeJs
NodeJS配置HTTPS服务实例分享
Feb 19 NodeJs
nodejs个人博客开发第三步 载入页面
Apr 12 NodeJs
nodejs实现简单的gulp打包
Dec 21 NodeJs
nodejs操作mongodb的填删改查模块的制作及引入实例
Jan 02 NodeJs
nodejs取得当前执行路径的方法
May 13 NodeJs
NodeJS http模块用法示例【创建web服务器/客户端】
Nov 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中使用cURL实现Get和Post请求的方法
2013/03/13 PHP
php判断页面是否是微信打开的示例(微信打开网页)
2014/04/25 PHP
PHP使用两个栈实现队列功能的方法
2018/01/15 PHP
javascript 一些用法小结
2009/09/11 Javascript
学习javascript,实现插入排序实现代码
2011/07/31 Javascript
window.navigate 与 window.location.href 的使用区别介绍
2013/09/21 Javascript
JQuery插件开发示例代码
2013/11/06 Javascript
javascript常用的正则表达式实例
2014/05/15 Javascript
Node.js中的流(Stream)介绍
2015/03/30 Javascript
深入理解逻辑表达式的用法 与或非的用法
2016/06/06 Javascript
禁用backspace网页回退功能的实现代码
2016/11/15 Javascript
JavaScript注入漏洞的原理及防范(详解)
2016/12/04 Javascript
微信小程序 页面之间传参实例详解
2017/01/13 Javascript
解决ajax不能访问本地文件问题(利用js跨域原理)
2017/01/24 Javascript
nodejs异步编程基础之回调函数用法分析
2018/12/26 NodeJs
Vue中CSS动画原理的实现
2019/02/13 Javascript
微信小程序学习笔记之获取位置信息操作图文详解
2019/03/29 Javascript
layui监听工具栏的实例(操作列表按钮)
2019/09/10 Javascript
layui扩展上传组件模拟进度条的方法
2019/09/23 Javascript
[01:04:20]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第一场 11.29
2020/12/02 DOTA
python复制列表时[:]和[::]之间有什么区别
2018/10/16 Python
python 读取dicom文件,生成info.txt和raw文件的方法
2019/01/24 Python
python3.6实现学生信息管理系统
2019/02/21 Python
python fuzzywuzzy模块模糊字符串匹配详细用法
2019/08/29 Python
Python OpenCV图像指定区域裁剪的实现
2019/10/30 Python
python小程序基于Jupyter实现天气查询的方法
2020/03/27 Python
python小白学习包管理器pip安装
2020/06/09 Python
保险专业自荐信范文
2014/02/20 职场文书
村党支部换届选举方案
2014/05/02 职场文书
干部个人对照检查材料
2014/08/25 职场文书
2014社会治安综合治理工作总结
2014/12/04 职场文书
导师工作推荐信
2015/03/27 职场文书
圆明园纪录片观后感
2015/06/03 职场文书
OpenCV图像变换之傅里叶变换的一些应用
2021/07/26 Python
Mysql中where与on的区别及何时使用详析
2021/08/04 MySQL
CSS 鼠标选中文字后改变背景色的实现代码
2023/05/21 HTML / CSS