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
nodejs中exports与module.exports的区别详细介绍
Jan 14 NodeJs
Nodejs+express+html5 实现拖拽上传
Aug 08 NodeJs
NodeJS中Buffer模块详解
Jan 07 NodeJs
使用nodejs中httpProxy代理时候出现404异常的解决方法
Aug 15 NodeJs
详解NodeJs支付宝移动支付签名及验签
Jan 06 NodeJs
基于nodejs 的多页面爬虫实例代码
May 31 NodeJs
CentOS 安装NodeJS V8.0.0的方法
Jun 15 NodeJs
nodejs用gulp管理前端文件方法
Jun 24 NodeJs
NodeJs 模仿SIP话机注册的方法
Jun 21 NodeJs
nodejs对mongodb数据库的增加修删该查实例代码
Jan 05 NodeJs
ubuntu系统下使用pm2设置nodejs开机自启动的方法
May 12 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提交后跳转
2013/06/23 PHP
PHP如何实现阿里云短信sdk灵活应用在项目中的方法
2019/06/14 PHP
PHP基于phpqrcode类生成二维码的方法示例详解
2020/08/07 PHP
Jquery写一个鼠标拖动效果实现原理与代码
2012/12/24 Javascript
禁用键盘上的(全局)指定键兼容iE、Chrome、火狐
2013/05/14 Javascript
简单的Jquery全选功能
2013/11/07 Javascript
JS实现匀速运动的代码实例
2013/11/29 Javascript
JS对象与json字符串格式转换实例
2014/10/28 Javascript
使用百度地图api实现根据地址查询经纬度
2014/12/11 Javascript
JavaScript中通过prototype属性共享属性和方法的技巧实例
2015/03/13 Javascript
详解Vue.js入门环境搭建
2017/03/17 Javascript
bootstrap模态框嵌套、tabindex属性、去除阴影的示例代码
2017/10/17 Javascript
详解IWinter 一个路由转控制器的 Nodejs 库
2017/11/15 NodeJs
微信小程序switch开关选择器使用详解
2018/01/31 Javascript
vue-router项目实战总结篇
2018/02/11 Javascript
微信小程序实现无限滚动列表
2020/05/29 Javascript
基于VUE实现简单的学生信息管理系统
2021/01/13 Vue.js
[01:59]翻天覆地,因你而变,7.20版本地图更新速览
2018/11/24 DOTA
[01:59]游戏“zheng”当时试玩会
2019/08/21 DOTA
Python中的XML库4Suite Server的介绍
2015/04/14 Python
Python使用Scrapy爬虫框架全站爬取图片并保存本地的实现代码
2018/03/04 Python
正确理解Python中if __name__ == '__main__'
2019/01/24 Python
Python基础之条件控制操作示例【if语句】
2019/03/23 Python
如何基于Python实现数字类型转换
2020/02/07 Python
Python如何使用队列方式实现多线程爬虫
2020/05/12 Python
python读取图像矩阵文件并转换为向量实例
2020/06/18 Python
Pandas替换及部分替换(replace)实现流程详解
2020/10/12 Python
完美解决torch.cuda.is_available()一直返回False的玄学方法
2021/02/06 Python
HTML5图片预览实例分享
2014/06/04 HTML / CSS
.NET里面什么时候需要调用垃圾回收
2015/06/01 面试题
学前教育教师求职自荐信
2013/09/22 职场文书
2013年军训通讯稿
2014/02/05 职场文书
办公自动化毕业生求职信
2014/03/09 职场文书
2014年国庆节演讲稿精选范文1500字
2014/09/25 职场文书
vue中利用mqtt服务端实现即时通讯的步骤记录
2021/07/01 Vue.js
详解Redis的三种常用的缓存读写策略步骤
2022/05/06 Redis