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实现黑名单中间件设计
Jun 17 NodeJs
nodejs教程之异步I/O
Nov 21 NodeJs
轻松创建nodejs服务器(6):作出响应
Dec 18 NodeJs
nodejs基础应用
Feb 03 NodeJs
Nodejs基于LRU算法实现的缓存处理操作示例
Mar 17 NodeJs
配置nodejs环境的方法
May 13 NodeJs
NodeJS创建最简单的HTTP服务器
May 15 NodeJs
nodeJS实现简单网页爬虫功能的实例(分享)
Jun 08 NodeJs
webstorm中配置nodejs环境及npm的实例
May 15 NodeJs
NodeJS 将文件夹按照存放路径变成一个对应的JSON的方法
Oct 17 NodeJs
nodejs微信开发之自动回复的实现
Mar 17 NodeJs
Nodejs实现微信分账的示例代码
Jan 19 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+MySQL搭建聊天室功能实例代码
2012/08/20 PHP
php实现生成带二维码图片并强制下载功能
2018/02/24 PHP
为radio类型的INPUT添加客户端脚本(附加实现JS来禁用onClick事件思路代码)
2010/11/11 Javascript
JavaScript中“基本类型”之争小结
2013/01/03 Javascript
一个简单的jQuery计算器实现了连续计算功能
2014/07/21 Javascript
jquery ui bootstrap 实现自定义风格
2014/11/14 Javascript
浅谈jquery选择器 :first与:first-child的区别
2016/11/20 Javascript
简单易懂的天气插件(代码分享)
2017/02/04 Javascript
JS检测是否可以访问公网服务器功能代码
2017/06/19 Javascript
vue2.0移动端滑动事件vue-touch的实例代码
2018/11/27 Javascript
解决vue移动端适配问题
2018/12/12 Javascript
小程序实现新用户判断并跳转激活的方法
2019/05/20 Javascript
jquery实现吸顶导航效果
2020/01/08 jQuery
Python fileinput模块使用介绍
2014/11/30 Python
使用beaker让Facebook的Bottle框架支持session功能
2015/04/23 Python
Python中List.index()方法的使用教程
2015/05/20 Python
详解Django中的ifequal和ifnotequal标签使用
2015/07/16 Python
Python的自动化部署模块Fabric的安装及使用指南
2016/01/19 Python
centos6.7安装python2.7.11的具体方法
2017/01/16 Python
简单易懂的python环境安装教程
2017/07/13 Python
pyinstaller打包多个py文件和去除cmd黑框的方法
2019/06/21 Python
python中有函数重载吗
2020/05/28 Python
详解pandas.DataFrame.plot() 画图函数
2020/06/14 Python
使用keras实现Precise, Recall, F1-socre方式
2020/06/15 Python
新西兰杂志订阅:isubscribe
2019/08/26 全球购物
2019年Java面试必问之经典试题
2012/09/12 面试题
后勤副校长自我鉴定
2013/10/13 职场文书
仓管员岗位职责范文
2013/11/08 职场文书
银行出纳岗位职责
2013/11/25 职场文书
实习生单位鉴定意见
2013/12/04 职场文书
颂军魂爱军营演讲稿
2014/09/13 职场文书
2014年教学管理工作总结
2014/12/02 职场文书
2015年考研复习计划
2015/01/19 职场文书
全国助残日活动总结
2015/05/11 职场文书
2019年入党思想汇报格式与要求
2019/06/25 职场文书
JAVA SpringMVC实现自定义拦截器
2022/03/16 Python