React如何解决fetch跨域请求时session失效问题


Posted in Javascript onNovember 02, 2018

前言

fetch在reactjs中等同于 XMLHttpRequest,它提供了许多与XMLHttpRequest相同的功能,但被设计成更具可扩展性和高效性。

Fetch 的核心在于对 HTTP 接口的抽象,包括 Request,Response,Headers,Body,以及用于初始化异步请求的 global fetch。得益于 JavaScript 实现的这些抽象好的 HTTP 模块,其他接口能够很方便的使用这些功能;除此之外,Fetch 还利用到了请求的异步特性——它是基于 Promise 的。

请注意,fetch 规范与 jQuery.ajax() 主要有两种方式的不同,牢记:

  • 当接收到一个代表错误的 HTTP 状态码时,从 fetch()返回的 Promise 不会被标记为 reject, 即使该 HTTP 响应的状态码是 404 或 500。相反,它会将 Promise 状态标记为 resolve (但是会将 resolve 的返回值的 ok 属性设置为 false ), 仅当网络故障时或请求被阻止时,才会标记为 reject。
  • 默认情况下, fetch 不会从服务端发送或接收任何 cookies, 如果站点依赖于用户 session,则会导致未经认证的请求(要发送 cookies,必须设置 credentials 选项).

发现问题

在解决fetch跨域请求接口的时候,一般都是让后台接口在返回头里添加

//允许所有域名的脚本访问该资源
header("Access-Control-Allow-Origin: *");

React如何解决fetch跨域请求时session失效问题

确实这样是可以解决跨域请求的问题,但是如果我们要在请求的时候添加session,那么这样设置就会出现问题了。

fetch添加Cookie验证的方法是设置credentials: 'include'

fetch(url, {
  method: 'POST',
  body: JSON.stringify(params),
  mode: 'cors',
  //请求时添加Cookie
  credentials: 'include',
  headers: new Headers({
   'Accept': 'application/json',
   "Content-Type": "application/x-www-form-urlencoded; charset=utf-8",
  })
 })

设置好了之后,信心满满的发起请求。却发现网络请求报错了

A wildcard '*' cannot be used in the 'Access-Control-Allow-Origin' header when the credentials flag is true. Origin 'http://localhost:3000' is therefore not allowed access

解决方法

原因是网络请求需要携带Cookie时Access-Control-Allow-Origin是不能设置为*的,这个时候应该要给Access-Control-Allow-Origin指定域名

React如何解决fetch跨域请求时session失效问题

这样就可以达到跨域请求的同时传递Cookie的目的了

  • 列表项目

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
使用jQuery仿苹果官网焦点图特效
Dec 23 Javascript
Javascript中typeof 用法小结
May 12 Javascript
AngularJS中使用HTML5手机摄像头拍照
Feb 22 Javascript
js获取页面引用的css样式表中的属性值方法(推荐)
Aug 19 Javascript
JavaScript reduce和reduceRight详解
Oct 24 Javascript
JavaScript数据结构之优先队列与循环队列实例详解
Oct 27 Javascript
详解如何实现一个简单的 vuex
Feb 10 Javascript
微信小程序上传图片功能(附后端代码)
Jun 19 Javascript
vue基础之使用get、post、jsonp实现交互功能示例
Mar 12 Javascript
小程序采集录音并上传到后台
Nov 22 Javascript
返回上一个url并刷新界面的js代码
Sep 12 Javascript
js对象属性名驼峰式转下划线的实例代码
Sep 17 Javascript
element ui table 增加筛选的方法示例
Nov 02 #Javascript
Vue请求JSON Server服务器数据的实现方法
Nov 02 #Javascript
详解使用element-ui table组件的筛选功能的一个小坑
Nov 02 #Javascript
如何使用vuex实现兄弟组件通信
Nov 02 #Javascript
JavaScript 复制对象与Object.assign方法无法实现深复制
Nov 02 #Javascript
vue头部导航动态点击处理方法
Nov 02 #Javascript
angular6 利用 ngContentOutlet 实现组件位置交换(重排)
Nov 02 #Javascript
You might like
用PHP实现读取和编写XML DOM代码
2010/04/07 PHP
php中使用url传递数组的方法
2015/02/11 PHP
浅谈php提交form表单
2015/07/01 PHP
php多进程应用场景实例详解
2019/07/22 PHP
WEB页子窗口(showModalDialog和showModelessDialog)使用说明
2009/10/25 Javascript
js如何获取file控件的完整路径具体实现代码
2013/05/15 Javascript
深入理解javaScript中的事件驱动
2013/05/21 Javascript
Javascript中各种trim的实现详细解析
2013/12/10 Javascript
深入浅析Bootstrap列表组组件
2016/05/03 Javascript
jquery  实现轮播图详解及实例代码
2016/10/12 Javascript
Vue自定义属性实例分析
2019/02/23 Javascript
NodeJS实现同步的方法
2019/03/02 NodeJs
微信公众号获取用户地理位置并列出附近的门店的示例代码
2019/07/25 Javascript
在Layui中操作数据表格,给指定单元格添加事件示例
2019/10/26 Javascript
纯js+css实现仿移动端淘宝网站的弹出详情框功能
2019/12/29 Javascript
JavaScript中继承原理与用法实例入门
2020/05/09 Javascript
vue 限制input只能输入正数的操作
2020/08/05 Javascript
Python httplib模块使用实例
2015/04/11 Python
Python处理XML格式数据的方法详解
2017/03/21 Python
python绘制简单折线图代码示例
2017/12/19 Python
python GUI库图形界面开发之PyQt5简单绘图板实例与代码分析
2020/03/08 Python
python+selenium+chromedriver实现爬虫示例代码
2020/04/10 Python
Keras中的两种模型:Sequential和Model用法
2020/06/27 Python
解决PDF 转图片时丢文字的一种可能方式
2021/03/04 Python
英国领先的电子、技术和办公用品购物网站:Ebuyer
2018/04/04 全球购物
Supersmart英国:欧洲市场首批食品补充剂供应商之一
2018/05/05 全球购物
重新定义牛仔布,100美元以下:Warp + Weft
2018/07/25 全球购物
加热夹克:RAVEAN
2018/10/19 全球购物
大学生毕业自我评价范文分享
2013/11/11 职场文书
酒吧创业计划书
2014/01/18 职场文书
2014年十一国庆节爱国演讲稿
2014/09/23 职场文书
退伍军人感言
2015/08/01 职场文书
辞职离别感言
2015/08/04 职场文书
导游词之山东八大关
2019/12/18 职场文书
MySQL令人咋舌的隐式转换
2021/04/05 MySQL
Python制作表白爱心合集
2022/01/22 Python