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 相关文章推荐
jQeury淡入淡出需要注意的问题
Sep 08 Javascript
jQuery动态添加删除select项(实现代码)
Sep 03 Javascript
JavaScript中操作字符串小结
May 04 Javascript
jQuery拖动布局其结果保存到数据库
Oct 09 Javascript
javascript 常用验证函数总结
Jun 28 Javascript
javascript之with的使用(阿里云、淘宝使用代码分析)
Oct 11 Javascript
JavaScript 限制文本框不可输入英文单双引号的方法
Dec 20 Javascript
原生javascript上传图片带进度条【实例分享】
Apr 06 Javascript
微信小程序 支付后台java实现实例
May 09 Javascript
解决vue2.0路由跳转未匹配相应用路由避免出现空白页面的问题
Aug 24 Javascript
Vue.js自定义指令学习使用详解
Oct 19 Javascript
JavaScript封装单向链表的示例代码
Sep 17 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 fread()使用技巧
2010/01/22 PHP
php使用strtotime和date函数判断日期是否有效代码分享
2013/12/25 PHP
递归删除一个节点以及该节点下的所有节点示例
2014/03/19 PHP
PHP curl CURLOPT_RETURNTRANSFER参数的作用使用实例
2015/02/07 PHP
Js四则运算函数代码
2012/07/21 Javascript
JavaScript实现快速排序(自已编写)
2012/12/19 Javascript
js去除空格的12种实用方法
2013/11/08 Javascript
jQuery 处理页面的事件详解
2015/01/20 Javascript
jquery悬浮提示框完整实例
2016/01/13 Javascript
JQuery validate插件验证用户注册信息
2016/05/11 Javascript
JavaScript数组合并的多种方法
2016/05/22 Javascript
基于angularJS的表单验证指令介绍
2016/10/21 Javascript
常用的javascript设计模式
2017/01/11 Javascript
json2.js 入门教程之使用方法与实例分析
2017/09/14 Javascript
Vue完整项目构建(进阶篇)
2018/02/10 Javascript
详解从NodeJS搭建中间层再谈前后端分离
2018/11/13 NodeJs
JS实现简单打字测试
2020/06/24 Javascript
[05:45]Ti4观战指南(下)
2014/07/07 DOTA
[49:08]Secret vs VP 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
在Python中操作时间之strptime()方法的使用
2020/12/30 Python
python模块导入的细节详解
2018/12/10 Python
Python面向对象思想与应用入门教程【类与对象】
2019/04/12 Python
Python实现连接MySql数据库及增删改查操作详解
2019/04/16 Python
树莓派用python中的OpenCV输出USB摄像头画面
2019/06/22 Python
python wav模块获取采样率 采样点声道量化位数(实例代码)
2020/01/22 Python
CSS3制作圆形滚动进度条动画的示例
2020/11/05 HTML / CSS
印尼值得信赖的在线交易网站:Bukalapak
2019/03/11 全球购物
小型女装店的创业计划书
2014/01/09 职场文书
和谐家庭演讲稿
2014/05/24 职场文书
小学优秀班干部事迹材料
2014/05/25 职场文书
爱护公物标语
2014/06/24 职场文书
公司禁烟通知
2015/04/23 职场文书
企业宣传稿范文
2015/07/23 职场文书
CSS变量实现主题切换的方法
2021/06/23 HTML / CSS
RPM包方式安装Oracle21c的方法详解
2021/08/23 Oracle
Python中Matplotlib的点、线形状、颜色以及绘制散点图
2022/04/07 Python