axios中cookie跨域及相关配置示例详解


Posted in Javascript onDecember 20, 2017

前言

最近在跨域、cookie 以及表单上传这几个方面遇到了点小问题,做个简单探究和总结。本文主要介绍了关于axios中cookie跨域及相关配置的相关内容,下面话不多说了,来一起看看详细的介绍吧。

1、 带cookie请求 - 画个重点

axios默认是发送请求的时候不会带上cookie的,需要通过设置withCredentials: true来解决。 这个时候需要注意需要后端配合设置:

  • header信息 Access-Control-Allow-Credentials:true
  • Access-Control-Allow-Origin不可以为 '*',因为 '*' 会和 Access-Control-Allow-Credentials:true 冲突,需配置指定的地址

如果后端设置 Access-Control-Allow-Origin: '*' , 会有如下报错信息

Failed to load http://localhost:8090/category/lists: The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' when the request's credentials mode is 'include'. Origin 'http://localhost:8081' is therefore not allowed access. The credentials mode of requests initiated by the XMLHttpRequest is controlled by the withCredentials attribute.

后端配置缺一不可,否则会出错,贴上我的后端示例:

const express = require('express')
const app = express()
const cors = require('cors') // 此处我的项目中使用express框架,跨域使用了cors npm插件
app.use(cors{
   credentials: true, 
   origin: 'http://localhost:8081', // web前端服务器地址
   // origin: '*' // 这样会出错
  })

成功之后,可在请求中看到

2、我的前端项目代码的axios配置

axios统一配置,会很好的提升效率,避免bug,以及定位出bug所在(方便捕获到error信息)

建立一个单独的fetch.js封装axios请求并作为方法暴露出来

import axios from 'axios'
// 创建axios实例
const service = axios.create({
 baseURL: process.env.BASE_API, // node环境的不同,对应不同的baseURL
 timeout: 5000, // 请求的超时时间
 //设置默认请求头,使post请求发送的是formdata格式数据// axios的header默认的Content-Type好像是'application/json;charset=UTF-8',我的项目都是用json格式传输,如果需要更改的话,可以用这种方式修改
 // headers: { 
 // "Content-Type": "application/x-www-form-urlencoded"
 // },
 withCredentials: true // 允许携带cookie
})
// 发送请求前处理request的数据
axios.defaults.transformRequest = [function (data) {
 let newData = ''
 for (let k in data) {
 newData += encodeURIComponent(k) + '=' + encodeURIComponent(data[k]) + '&'
 }
 return newData
}]
// request拦截器
service.interceptors.request.use(
 config => {
 // 发送请求之前,要做的业务
 return config
 },
 error => {
 // 错误处理代码
 
 return Promise.reject(error)
 }
)
// response拦截器
service.interceptors.response.use(
 response => {
 // 数据响应之后,要做的业务
 return response
 },
 error => {
 return Promise.reject(error)
 }
)
export default service

如下所示,如果需要调用ajax请求

import fetch from '@/utils/fetch'
fetch({
 method: 'get',
 url: '/users/list'
})
 .then(res => {
 cosole.log(res)
})

总结

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

Javascript 相关文章推荐
JS基础之undefined与null的区别分析
Aug 08 Javascript
IE中getElementsByName()对有些元素无效的解决方案
Sep 28 Javascript
javascript中Date对象的getDay方法使用指南
Dec 22 Javascript
浅谈JavaScript中Date(日期对象),Math对象
Feb 05 Javascript
jQuery基于ajax实现带动画效果无刷新柱状图投票代码
Aug 10 Javascript
jquery实现树形菜单完整代码
Dec 29 Javascript
jquery取消事件冒泡的三种方法(推荐)
May 28 Javascript
javascript中使用未定义变量或值的情况分析
Jul 19 Javascript
AngularJS基础 ng-model 指令详解及示例代码
Aug 02 Javascript
webpack配置之后端渲染详解
Oct 26 Javascript
js实现星星打分效果
Jul 05 Javascript
jQuery编写QQ简易聊天框
Aug 27 jQuery
JavaScript实现重力下落与弹性效果的方法分析
Dec 20 #Javascript
axios进阶实践之利用最优雅的方式写ajax请求
Dec 20 #Javascript
vue.js $refs和$emit 父子组件交互的方法
Dec 20 #Javascript
jQuery进阶实践之利用最优雅的方式如何写ajax请求
Dec 20 #jQuery
详解Vue 中 extend 、component 、mixins 、extends 的区别
Dec 20 #Javascript
vue.js vue-router如何实现无效路由(404)的友好提示
Dec 20 #Javascript
详解vue mixins和extends的巧妙用法
Dec 20 #Javascript
You might like
探讨:如何使用PHP实现计算两个日期间隔的年、月、周、日数
2013/06/13 PHP
基于xcache的配置与使用详解
2013/06/18 PHP
Laravel中使用阿里云OSS Composer包分享
2015/02/10 PHP
PHP中SERIALIZE和JSON的序列化与反序列化操作区别分析
2016/10/11 PHP
解决Laravel 使用insert插入数据,字段created_at为0000的问题
2019/10/11 PHP
Laravel 前端资源配置教程
2019/10/18 PHP
Mootools 图片展示插件(lightbox,ImageMenu)收集集合
2010/05/21 Javascript
JavaScript中日期的相关操作方法总结
2015/10/24 Javascript
js实现表单及时验证功能 用户信息立即验证
2016/09/13 Javascript
浅谈jQuery双事件多重加载的问题
2016/10/05 Javascript
深入理解Angular.JS中的Scope继承
2017/06/04 Javascript
jquery ajax加载数据前台渲染方式 不用for遍历的方法
2018/08/09 jQuery
jQuery实现的页面弹幕效果【测试可用】
2018/08/17 jQuery
react的滑动图片验证码组件的示例代码
2019/02/27 Javascript
如何实现小程序tab栏下划线动画效果
2019/05/18 Javascript
JS实现简易留言板(节点操作)
2020/03/16 Javascript
JavaScript 防盗链的原理以及破解方法
2020/12/29 Javascript
[01:38]完美世界DOTA2联赛PWL S3 集锦第四期
2020/12/21 DOTA
详解Python的collections模块中的deque双端队列结构
2016/07/07 Python
python验证码识别的示例代码
2017/09/21 Python
Python实现时钟显示效果思路详解
2018/04/11 Python
python绘制立方体的方法
2018/07/02 Python
python实现旋转和水平翻转的方法
2018/10/25 Python
Python八皇后问题解答过程详解
2019/07/29 Python
Python 3.8正式发布,来尝鲜这些新特性吧
2019/10/15 Python
python cv2读取rtsp实时码流按时生成连续视频文件方式
2019/12/25 Python
Python视频编辑库MoviePy的使用
2020/04/01 Python
python中@property的作用和getter setter的解释
2020/12/22 Python
社区安全检查制度
2014/02/03 职场文书
银行办公室岗位职责
2014/03/10 职场文书
本科生导师推荐信范文
2014/05/18 职场文书
工商管理自荐书
2014/07/06 职场文书
警察正风肃纪剖析材料
2014/10/16 职场文书
2014年护理工作总结范文
2014/11/14 职场文书
幼儿园六一儿童节活动总结
2015/02/10 职场文书
安全生产感想
2015/08/07 职场文书