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 相关文章推荐
PHPStorm 2020.1 调试 Nodejs的多种方法详解
Sep 17 NodeJs
windows系统下简单nodejs安装及环境配置
Jan 08 NodeJs
使用DNode实现php和nodejs之间通信的简单实例
Jul 06 NodeJs
nodejs 的 session 简单使用
Jun 06 NodeJs
NodeJs——入门必看攻略
Jun 27 NodeJs
初探nodeJS
Jan 24 NodeJs
初识NodeJS服务端开发入门(Express+MySQL)
Apr 07 NodeJs
nodejs操作mysql实现增删改查的实例
May 28 NodeJs
NodeJS收发GET和POST请求的示例代码
Aug 25 NodeJs
Nodejs连接mysql并实现增、删、改、查操作的方法详解
Jan 04 NodeJs
nodejs实现连接mongodb数据库的方法示例
Mar 15 NodeJs
Nodejs + sequelize 实现增删改查操作
Nov 07 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
在“咖啡之国”感受咖啡文化
2021/03/03 咖啡文化
如何对PHP程序中的常见漏洞进行攻击(下)
2006/10/09 PHP
经典的PHPer为什么被认为是草根?
2007/04/02 PHP
利用PHP如何写APP接口详解
2016/08/23 PHP
JavaScript 自动完成脚本整理(33个)
2009/10/20 Javascript
遍历jquery对象的代码分享
2011/11/02 Javascript
js写一个弹出层并锁屏效果实现代码
2012/12/07 Javascript
使用jQuery实现的掷色子游戏动画效果
2014/03/14 Javascript
javascript限制用户只能输汉字中文的方法
2014/11/20 Javascript
学习JavaScript设计模式之观察者模式
2020/04/22 Javascript
浅述节点的创建及常见功能的实现
2016/12/15 Javascript
JavaScript中document.referrer的用法详解
2017/07/04 Javascript
Vue源码解析之数组变异的实现
2018/12/04 Javascript
Python聚类算法之基本K均值实例详解
2015/11/20 Python
python if not in 多条件判断代码
2016/09/21 Python
python模仿网页版微信发送消息功能
2018/02/24 Python
python调用百度REST API实现语音识别
2018/08/30 Python
Python开发网站目录扫描器的实现
2019/02/21 Python
python3.6 如何将list存入txt后再读出list的方法
2019/07/02 Python
Python操作Sqlite正确实现方法解析
2020/02/05 Python
python 实现"神经衰弱"翻牌游戏
2020/11/09 Python
python开发一个解析protobuf文件的简单编译器
2020/11/17 Python
python实现三种随机请求头方式
2021/01/05 Python
世界上最大的在线汽车租赁预订平台:Rentalcars.com(支持中文)
2018/10/12 全球购物
四年大学生活的个人自我评价
2013/12/11 职场文书
小学生学习感言
2014/03/10 职场文书
工程质量承诺书范文
2014/03/27 职场文书
《四季》教学反思
2014/04/08 职场文书
经营理念口号
2014/06/21 职场文书
医学求职自荐信
2014/06/21 职场文书
教师学习群众路线心得体会
2014/11/04 职场文书
员工年终考核评语
2014/12/31 职场文书
手术室消毒隔离制度
2015/08/05 职场文书
python人工智能human learn绘图可创建机器学习模型
2021/11/23 Python
【海涛解说】暗牧也疯狂,牛蛙成配角
2022/04/01 DOTA
MySQL的表级锁,行级锁,排它锁和共享锁
2022/07/15 MySQL