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爬虫进阶教程之异步并发控制
Feb 15 NodeJs
Nodejs如何搭建Web服务器
Mar 28 NodeJs
Nodejs全局安装和本地安装的不同之处
Jul 04 NodeJs
nodejs进阶(6)—连接MySQL数据库示例
Jan 07 NodeJs
解决nodejs中使用http请求返回值为html时乱码的问题
Feb 18 NodeJs
nodejs读写json文件的简单方法(必看)
Mar 09 NodeJs
简单好用的nodejs 爬虫框架分享
Mar 26 NodeJs
深入nodejs中流(stream)的理解
Mar 27 NodeJs
用nodejs实现json和jsonp服务的方法
Aug 25 NodeJs
Nodejs 发布自己的npm包并制作成命令行工具的实例讲解
May 15 NodeJs
NodeJS 实现多语言的示例代码
Sep 11 NodeJs
nodejs异步编程基础之回调函数用法分析
Dec 26 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 常用函数库和一些实用小技巧
2009/01/01 PHP
PHP实现删除非站内外部链接实例代码
2014/06/17 PHP
php 遍历目录,生成目录下每个文件的md5值并写入到结果文件中
2016/12/12 PHP
thinkPHP框架自动填充原理与用法分析
2018/04/03 PHP
基于swoole实现多人聊天室
2018/06/14 PHP
滚动条变色 隐藏滚动条与双击网页自动滚屏显示代码
2009/12/28 Javascript
jquery下为Event handler传递动态参数的代码
2011/01/06 Javascript
javascript的tab切换原理与效果实现方法
2015/01/10 Javascript
jQuery和hwSlider实现内容响应式可触控滑动切换效果附源码下载(二)
2016/06/22 Javascript
jquery 实现回车登录详解及实例代码
2016/10/23 Javascript
基于Vue2的移动端开发环境搭建详解
2016/11/03 Javascript
react-native 完整实现登录功能的示例代码
2017/09/11 Javascript
webpack打包js的方法
2018/03/12 Javascript
12 种使用Vue 的最佳做法
2020/03/30 Javascript
[10:42]Team Liquid Vs Newbee
2018/06/07 DOTA
用Python实现一个简单的多线程TCP服务器的教程
2015/05/05 Python
对于Python装饰器使用的一些建议
2015/06/03 Python
Windows下搭建python开发环境详细步骤
2020/07/20 Python
实例讲解Python编程中@property装饰器的用法
2016/06/20 Python
Python开发的HTTP库requests详解
2017/08/29 Python
pandas.dataframe中根据条件获取元素所在的位置方法(索引)
2018/06/07 Python
Tensorflow 训练自己的数据集将数据直接导入到内存
2018/06/19 Python
python迭代dict的key和value的方法
2018/07/06 Python
Python Tornado之跨域请求与Options请求方式
2020/03/28 Python
Pycharm激活方法及详细教程(详细且实用)
2020/05/12 Python
Reebok俄罗斯官方网上商店:购买锐步运动服装和鞋子
2016/09/26 全球购物
Smallable意大利家庭概念店:设计师童装及家居装饰
2018/01/08 全球购物
餐厅楼面主管岗位职责范本
2014/02/16 职场文书
2014年党支部学习材料
2014/05/19 职场文书
镇政府副镇长群众路线专题民主生活会对照检查材料
2014/09/19 职场文书
2015年秘书个人工作总结
2015/04/25 职场文书
员工离职通知函
2015/04/25 职场文书
pytorch 实现在测试的时候启用dropout
2021/05/27 Python
利用Pycharm连接服务器的全过程记录
2021/07/01 Python
详细谈谈JavaScript中循环之间的差异
2021/08/23 Javascript
Python自动操作神器PyAutoGUI的使用教程
2022/06/16 Python