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 相关文章推荐
JQuery Dialog的内存泄露问题解决方法
Jun 18 Javascript
jquery 面包屑导航 具体实现
Jun 05 Javascript
leaflet的开发入门教程
Nov 17 Javascript
详解jQuery的Cookie插件
Nov 23 Javascript
Three.js如何用轨迹球插件(trackball)增加对模型的交互功能详解
Sep 25 Javascript
详解基于electron制作一个node压缩图片的桌面应用
Jan 29 Javascript
详解webpack 最简打包结果分析
Feb 20 Javascript
利用angular自动编译andriod APK的绕坑经历分享
Mar 08 Javascript
使用JS来动态操作css的几种方法
Dec 18 Javascript
JavaScript 替换所有匹配内容及正则替换方法
Feb 12 Javascript
Vue+elementUI实现多图片上传与回显功能(含回显后继续上传或删除)
Mar 23 Javascript
pnpm对npm及yarn降维打击详解
Aug 05 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
example2.php
2006/10/09 PHP
smarty模板引擎之配置文件数据和保留数据
2015/03/30 PHP
YII Framework框架教程之日志用法详解
2016/03/14 PHP
传递参数的标准方法(jQuery.ajax)
2008/11/19 Javascript
读jQuery之八 包装事件对象
2011/06/21 Javascript
jquery阻止冒泡事件使用模拟事件
2013/09/06 Javascript
快速解决FusionCharts联动的中文乱码问题
2013/12/04 Javascript
jquery实现一个简单好用的弹出框
2014/09/26 Javascript
AngularJS Module方法详解
2015/12/08 Javascript
jQuery的选择器中的通配符[id^='code']或[name^='code']及jquery选择器总结
2015/12/24 Javascript
JS常见问题之为什么点击弹出的i总是最后一个
2016/01/05 Javascript
jQueryUI DatePicker 添加时分秒
2016/06/04 Javascript
jquery实现跳到底部,回到顶部效果的简单实例(类似锚)
2016/07/10 Javascript
JavaScript与ActionScript3两者的同性与差异性
2016/09/22 Javascript
深入理解JS实现快速排序和去重
2016/10/17 Javascript
JS实现颜色动态淡化效果
2017/03/06 Javascript
微信小程序注册60s倒计时功能 使用JS实现注册60s倒计时功能
2017/08/16 Javascript
vue-router判断页面未登录自动跳转到登录页的方法示例
2018/11/04 Javascript
基于Vue实现图片在指定区域内移动的思路详解
2018/11/11 Javascript
JS中的算法与数据结构之字典(Dictionary)实例详解
2019/08/20 Javascript
[33:42]LGD vs OG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
urllib和BeautifulSoup爬取维基百科的词条简单实例
2018/01/17 Python
eclipse创建python项目步骤详解
2019/05/10 Python
Python对接 xray 和微信实现自动告警
2019/09/17 Python
python opencv实现gif图片分解的示例代码
2019/12/13 Python
详解字符串在Python内部是如何省内存的
2020/02/03 Python
Python3 filecmp模块测试比较文件原理解析
2020/03/23 Python
keras中模型训练class_weight,sample_weight区别说明
2020/05/23 Python
python如何构建mock接口服务
2021/01/28 Python
简历自我评价怎么写好呢?
2014/01/04 职场文书
教师工作总结范文2014
2014/11/10 职场文书
2019自荐信该如何写呢?
2019/07/05 职场文书
python数据分析之用sklearn预测糖尿病
2021/04/22 Python
pytorch 如何把图像数据集进行划分成train,test和val
2021/05/31 Python
《巫师》是美食游戏?CDPR10月将推出《巫师》官方食谱
2022/04/03 其他游戏
如何Tomcat中使用ipv6地址
2022/05/06 Servers