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动态操作表格实例(添加,删除行,列及单元格)
Nov 25 Javascript
jquery使用淘宝接口跨域查询手机号码归属地实例
Nov 28 Javascript
display和visibility的区别示例介绍
Feb 26 Javascript
jQuery+PHP星级评分实现方法
Oct 02 Javascript
javascript图片切换综合实例(循环切换、顺序切换)
Jan 13 Javascript
Javascript之面向对象--方法
Dec 02 Javascript
vue判断input输入内容全是空格的方法
Mar 02 Javascript
vue使用echarts图表的详细方法
Oct 22 Javascript
jQuery动态操作表单示例【基于table表格】
Dec 06 jQuery
解决jquery validate 验证不通过后验证正确的信息仍残留在label上的方法
Aug 27 jQuery
手写Vue弹窗Modal的实现代码
Sep 11 Javascript
Vue 实现可视化拖拽页面编辑器
Feb 01 Vue.js
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过滤XSS攻击的函数
2013/11/12 PHP
PHP实现设计模式中的抽象工厂模式详解
2014/10/11 PHP
php获取Google机器人访问足迹的方法
2015/04/15 PHP
php计算整个目录大小的方法
2015/06/19 PHP
javascript String 对象
2008/04/25 Javascript
jQuery 使用手册(一)
2009/09/23 Javascript
使用Microsoft Ajax Minifier减小JavaScript文件大小的方法
2010/04/01 Javascript
js 全兼容可高亮二级缓冲折叠菜单
2010/06/04 Javascript
JavaScript基础篇之变量作用域、传值、传址的简单介绍与实例
2013/06/29 Javascript
JQuery实现当鼠标停留在某区域3秒后自动执行
2014/09/09 Javascript
Javascript基础知识(二)事件
2014/09/29 Javascript
JS使用parseInt解析数字实现求和的方法
2015/08/05 Javascript
javascript弹性运动效果简单实现方法
2016/01/08 Javascript
jQuery绑定自定义事件的魔法升级版
2016/06/30 Javascript
AngularJS中$http的交互问题
2017/03/29 Javascript
Vue.js仿Metronic高级表格(二)数据渲染
2017/04/19 Javascript
详解angular ui-grid之过滤器设置
2017/06/07 Javascript
vue2.0 子组件改变props值,并向父组件传值的方法
2018/03/01 Javascript
vue下拉列表功能实例代码
2018/04/08 Javascript
详解vue 命名视图
2019/08/14 Javascript
Vue3.x源码调试的实现方法
2019/10/13 Javascript
原生JS实现萤火虫效果
2020/03/07 Javascript
es6函数之箭头函数用法实例详解
2020/04/25 Javascript
Element Badge标记的使用方法
2020/07/27 Javascript
Python实现设置windows桌面壁纸代码分享
2015/03/28 Python
深入讲解Java编程中类的生命周期
2016/02/05 Python
Python入门之三角函数tan()函数实例详解
2017/11/08 Python
Docker如何部署Python项目的实现详解
2020/10/26 Python
一款基于css3的列表toggle特效实例教程
2015/01/04 HTML / CSS
官方授权图形T恤和服装:Fifth Sun
2019/06/12 全球购物
文明礼仪小标兵事迹
2014/01/12 职场文书
如何撰写岗位职责
2014/02/01 职场文书
毕业生班级鉴定评语
2015/01/04 职场文书
2019公司管理制度
2019/04/19 职场文书
10大幻兽系恶魔果实 蝙蝠果实上榜,第一自愈能力强
2022/03/18 日漫
CDPR谈《巫师》新作用虚幻5原因 称不会为Epic独占
2022/04/06 其他游戏