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 相关文章推荐
JavaScript 节点操作 以及DOMDocument属性和方法
Dec 06 Javascript
图片轮换效果实现代码(点击按钮停止执行)
Apr 12 Javascript
加随机数引入脚本不让浏览器读取缓存
Sep 04 Javascript
编写自己的jQuery提示框(Tip)插件
Feb 05 Javascript
jQuery EasyUI 入门必看
Jun 03 Javascript
Bootstrap表单布局样式源代码
Jul 04 Javascript
脚本div实现拖放功能(两种)
Feb 13 Javascript
bootstrap table表格插件使用详解
May 08 Javascript
BootStrap中的Fontawesome 图标
May 25 Javascript
AngularJS通过ng-Img-Crop实现头像截取的示例
Aug 17 Javascript
Vue仿今日头条实例详解
Feb 06 Javascript
vue 动态设置img的src地址无效,npm run build 后找不到文件的解决
Jul 26 Javascript
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代码
2008/04/09 PHP
php下载文件的代码示例
2012/06/29 PHP
浅析Yii中使用RBAC的完全指南(用户角色权限控制)
2013/06/20 PHP
朋友网关于QQ相关的PHP代码(研究QQ的绝佳资料)
2015/01/26 PHP
PHP与服务器文件系统的简单交互
2016/10/21 PHP
关于恒等于(===)和非恒等于(!==)
2007/08/20 Javascript
js浮点数精确计算(加、减、乘、除)
2013/12/26 Javascript
DOM基础教程之使用DOM设置文本框
2015/01/20 Javascript
jquery实现树形菜单完整代码
2015/12/29 Javascript
JavaScript简单实现弹出拖拽窗口(二)
2016/06/17 Javascript
vue2.0在table中实现全选和反选的示例代码
2017/11/04 Javascript
优雅地使用loading(推荐)
2019/04/20 Javascript
JointJS JavaScript流程图绘制框架解析
2019/08/15 Javascript
浅谈Vue3.0之前你必须知道的TypeScript实战技巧
2019/09/11 Javascript
微信小程序实现同时上传多张图片
2020/02/03 Javascript
Vue项目打包压缩的实现(让页面更快响应)
2020/03/10 Javascript
在vue项目中利用popstate处理页面返回的操作介绍
2020/08/06 Javascript
vue动态加载SVG文件并修改节点数据的操作代码
2020/08/17 Javascript
openlayers实现地图弹窗
2020/09/25 Javascript
Python3读取zip文件信息的方法
2015/05/22 Python
Python简单格式化时间的方法【strftime函数】
2016/09/18 Python
python构建深度神经网络(DNN)
2018/03/10 Python
python 进程间数据共享multiProcess.Manger实现解析
2019/09/23 Python
tensorflow指定GPU与动态分配GPU memory设置
2020/02/03 Python
解决python中显示图片的plt.imshow plt.show()内存泄漏问题
2020/04/24 Python
Spring @Enable模块驱动原理及使用实例
2020/06/23 Python
python3中数组逆序输出方法
2020/12/01 Python
html5 worker 实例(二) 图片变换效果
2013/06/24 HTML / CSS
Sneaker Studio罗马尼亚网站:购买运动鞋
2018/11/04 全球购物
美丽的珠宝配饰:SmallThings
2019/09/04 全球购物
实习医生自我评价
2013/09/22 职场文书
辞职信怎么写
2015/02/27 职场文书
家庭暴力离婚起诉书
2015/05/18 职场文书
情侣餐厅的创业计划书范本!
2019/07/26 职场文书
java协程框架quasar和kotlin中的协程对比分析
2022/02/24 Java/Android
APP界面设计技巧和注意事项
2022/04/29 杂记