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和PhantomJS抓取网站页面信息以及网站截图
Nov 18 NodeJs
Nodejs使用mysql模块之获得更新和删除影响的行数的方法
Mar 18 NodeJs
nodejs 实现模拟form表单上传文件
Jul 14 NodeJs
nodejs开发环境配置与使用
Nov 17 NodeJs
nodejs如何获取时间戳与时间差
Aug 03 NodeJs
使用 NodeJS+Express 开发服务端的简单介绍
Apr 07 NodeJs
详解nodejs微信公众号开发——5.素材管理接口
Apr 11 NodeJs
Nodejs中使用captchapng模块生成图片验证码
May 18 NodeJs
详解nodeJS之路径PATH模块
May 31 NodeJs
docker中编译nodejs并使用nginx启动
Jun 23 NodeJs
nodejs对express中next函数的一些理解
Sep 08 NodeJs
nodejs使用http模块发送get与post请求的方法示例
Jan 08 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支持时的替代方案
2006/10/09 PHP
php读取数据库信息的几种方法
2008/05/24 PHP
关于php操作mysql执行数据库查询的一些常用操作汇总
2013/06/24 PHP
PHP Yaf框架的简单安装使用教程(推荐)
2016/06/08 PHP
PHP 实现页面静态化的几种方法
2017/07/23 PHP
Lumen timezone 时区设置方法(慢了8个小时)
2018/01/20 PHP
基于PHP实现微信小程序客服消息功能
2019/08/12 PHP
window.print打印指定div实例代码
2013/12/13 Javascript
jQuery特殊符号转义的实现
2016/11/30 Javascript
js脚本编写简单刷票投票系统
2017/06/27 Javascript
Nodejs对postgresql基本操作的封装方法
2019/02/20 NodeJs
原生javascript运动函数的封装示例【匀速、抛物线、多属性的运动等】
2020/02/23 Javascript
浅谈JavaScript节流和防抖函数
2020/08/25 Javascript
Python群发邮件实例代码
2014/01/03 Python
python进阶教程之循环相关函数range、enumerate、zip
2014/08/30 Python
Python生成器(Generator)详解
2015/04/13 Python
详解在Python中处理异常的教程
2015/05/24 Python
Python的包管理器pip更换软件源的方法详解
2016/06/20 Python
Python用zip函数同时遍历多个迭代器示例详解
2016/11/14 Python
Python开发虚拟环境使用virtualenvwrapper的搭建步骤教程图解
2018/09/19 Python
python实现两个dict合并与计算操作示例
2019/07/01 Python
python模拟点击网页按钮实现方法
2020/02/25 Python
html2canvas截图空白问题的解决
2020/03/24 HTML / CSS
Europcar英国:英国汽车和货车租赁
2017/01/21 全球购物
美国运动鞋和服装网上商店:YCMC
2018/09/15 全球购物
土木工程毕业生推荐信
2013/10/28 职场文书
演讲比赛获奖感言
2014/02/02 职场文书
安全施工标语
2014/06/07 职场文书
超市创意活动方案
2014/08/15 职场文书
乡镇党委书记个人整改措施
2014/09/15 职场文书
民主生活会批评与自我批评总结
2014/10/17 职场文书
2015年元旦文艺晚会总结(学院)
2014/11/28 职场文书
Python3 类型标注支持操作
2021/06/02 Python
分享几种python 变量合并方法
2022/03/20 Python
Python数据可视化之Seaborn的安装及使用
2022/04/19 Python
Android Studio实现带三角函数对数运算功能的高级计算器
2022/05/20 Java/Android