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异步回调的优雅处理方法
Sep 25 NodeJs
Windows 系统下设置Nodejs NPM全局路径
Apr 26 NodeJs
浅谈Nodejs中的作用域问题
Dec 26 NodeJs
nodejs实现邮件发送服务实例分享
Mar 29 NodeJs
详解nodejs微信公众号开发——4.自动回复各种消息
Apr 11 NodeJs
nodejs入门教程二:创建一个简单应用示例
Apr 24 NodeJs
webstorm中配置nodejs环境及npm的实例
May 15 NodeJs
解决Nodejs全局安装模块后找不到命令的问题
May 15 NodeJs
nodejs实现套接字服务功能详解
Jun 21 NodeJs
NodeJs实现简易WEB上传下载服务器
Aug 10 NodeJs
详解利用nodejs对本地json文件进行增删改查
Sep 20 NodeJs
Nodejs 数组的队列以及forEach的应用详解
Feb 25 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
MVC模式的PHP实现
2006/10/09 PHP
PHP中上传大体积文件时需要的设置
2006/10/09 PHP
php程序的国际化实现方法(利用gettext)
2011/08/14 PHP
轻松掌握php设计模式之访问者模式
2016/09/23 PHP
php解压缩zip和rar压缩包文件的方法
2019/07/10 PHP
event.X和event.clientX的区别分析
2011/10/06 Javascript
基于jQuery的弹出框插件
2012/03/18 Javascript
jQuery表格插件ParamQuery简单使用方法示例
2013/12/05 Javascript
jQuery学习笔记之jQuery.extend(),jQuery.fn.extend()分析
2014/06/09 Javascript
编写高质量JavaScript代码的基本要点
2016/03/02 Javascript
jQuery实现复选框的全选和反选
2017/02/02 Javascript
JS 60秒后重新发送验证码的实例讲解
2017/07/26 Javascript
基于jquery实现多选下拉列表
2017/08/02 jQuery
微信小程序实现动态设置页面标题的方法【附源码下载】
2017/11/29 Javascript
jquery实现的简单轮播图功能【适合新手】
2018/08/17 jQuery
node.js实现为PDF添加水印的示例代码
2018/12/05 Javascript
微信小程序实现炫酷的弹出式菜单特效
2019/01/28 Javascript
Vue Autocomplete 自动完成功能简单示例
2019/05/25 Javascript
生成无限制的微信小程序码的示例代码
2019/09/20 Javascript
nest.js 使用express需要提供多个静态目录的操作方法
2019/10/24 Javascript
Vue 简单实现前端权限控制的示例
2020/12/25 Vue.js
java直接调用python脚本的例子
2014/02/16 Python
python使用opencv按一定间隔截取视频帧
2018/03/06 Python
Python实现字典按key或者value进行排序操作示例【sorted】
2019/05/03 Python
OpenCV里的imshow()和Matplotlib.pyplot的imshow()的实现
2019/11/25 Python
解决Django Haystack全文检索为空的问题
2020/05/19 Python
基于keras中的回调函数用法说明
2020/06/17 Python
python程序实现BTC(比特币)挖矿的完整代码
2021/01/20 Python
如何查看在weblogic中已经发布的EJB
2012/06/01 面试题
最新计算机专业自荐信
2013/10/16 职场文书
实习教师自我鉴定
2013/12/12 职场文书
环境保护标语
2014/06/20 职场文书
办公室主任个人对照检查材料思想汇报
2014/10/11 职场文书
流动人口婚育证明
2014/10/19 职场文书
关于对TypeScript泛型参数的默认值理解
2022/07/15 Javascript
HTML静态页面获取url参数和UserAgent的实现
2022/08/05 HTML / CSS