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(三)--- Node.js模块
May 25 NodeJs
Nodejs极简入门教程(一):模块机制
Oct 25 NodeJs
nodejs下打包模块archiver详解
Dec 03 NodeJs
nodejs开发微博实例
Mar 25 NodeJs
nodejs搭建本地http服务器教程
Mar 13 NodeJs
nodejs入门教程三:调用内部和外部方法示例
Apr 24 NodeJs
详解Windows下安装Nodejs步骤
May 18 NodeJs
NodeJS实现图片上传代码(Express)
Jun 30 NodeJs
nodejs构建本地web测试服务器 如何解决访问静态资源问题
Jul 14 NodeJs
nodejs调取微信收货地址的方法
Dec 20 NodeJs
Nodejs中的JWT和Session的使用
Aug 21 NodeJs
NodeJS配置CORS实现过程详解
Dec 02 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
40年前的这部特摄片恐龙特级克塞号80后的共同回忆
2020/03/08 日漫
如何在symfony中导出为CSV文件中的数据
2011/10/06 PHP
探讨如何把session存入数据库
2013/06/07 PHP
php实现的SESSION类
2014/12/02 PHP
PHP读书笔记整理_结构语句详解
2016/07/01 PHP
详解PHP处理字符串类似indexof的方法函数
2017/06/11 PHP
快速解决PHP调用Word组件DCOM权限的问题
2017/12/27 PHP
用Javascript评估用户输入密码的强度实现代码
2011/11/30 Javascript
javascript实现手机震动API代码
2015/08/05 Javascript
简单学习JavaScript中的for语句循环结构
2015/11/10 Javascript
js实现的下拉框二级联动效果
2016/04/30 Javascript
关于RequireJS的简单介绍即使用方法
2016/10/20 Javascript
微信小程序 网络API Websocket详解
2016/11/09 Javascript
利用jQuery来动态为属性添加或者删除属性的简单方法
2016/12/02 Javascript
jQuery实现动态删除LI的方法
2017/05/30 jQuery
详解React 在服务端渲染的实现
2017/11/16 Javascript
详解如何构建Promise队列实现异步函数顺序执行
2018/10/23 Javascript
微信小程序自定义tabbar custom-tab-bar 6s出不来解决方案(cover-view不兼容)
2019/11/01 Javascript
在vue中使用el-tab-pane v-show/v-if无效的解决
2020/08/03 Javascript
Python lambda和Python def区别分析
2014/11/30 Python
在Python中使用itertools模块中的组合函数的教程
2015/04/13 Python
基于Python的文件类型和字符串详解
2017/12/21 Python
pycharm在调试python时执行其他语句的方法
2018/11/29 Python
Python提取特定时间段内数据的方法实例
2019/04/01 Python
利用Tensorflow的队列多线程读取数据方式
2020/02/05 Python
python自动从arxiv下载paper的示例代码
2020/12/05 Python
美国Rue La La闪购网站:奢侈品、中高档品牌限时折扣
2016/10/19 全球购物
计算机专业毕业生自我鉴定
2014/01/16 职场文书
怎样拟定创业计划书
2014/05/01 职场文书
幼儿园区域活动总结
2014/05/08 职场文书
大二学生学年自我鉴定
2014/09/12 职场文书
2014年个人技术工作总结
2014/12/08 职场文书
2016年社区国庆节活动总结
2016/04/01 职场文书
使用pd.merge表连接出现多余行的问题解决
2022/06/16 Python
腾讯云服务器部署前后分离项目之前端部署
2022/06/28 Servers
ssh服务器拒绝了密码 请再试一次已解决(亲测有效)
2022/08/14 Servers