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 ajax abort()的使用方法
Oct 28 Javascript
巧用js提交表单轻松解决一个页面有多个提交按钮
Nov 17 Javascript
Jquery easyUI 更新行示例
Mar 06 Javascript
单元选择合并变色示例代码
May 26 Javascript
用console.table()调试javascript
Sep 04 Javascript
JavaScript优化专题之Loading and Execution加载和运行
Jan 20 Javascript
JS密码生成与强度检测完整实例(附demo源码下载)
Apr 06 Javascript
浅析如何利用JavaScript进行语音识别
Oct 27 Javascript
Vue.js创建Calendar日历效果
Nov 03 Javascript
layui 监听select选择 获取当前select的ID名称方法
Sep 24 Javascript
使用JavaScript实现网页秒表功能(含开始、暂停、继续、重置功能)
Jun 05 Javascript
ES6中的Javascript解构的实现
Oct 30 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 adodb操作mysql数据库
2009/03/19 PHP
Smarty中调用FCKeditor的方法
2014/10/27 PHP
php使用FFmpeg接口获取视频的播放时长、码率、缩略图以及创建时间
2016/11/07 PHP
图片自动更新(说明)
2006/10/02 Javascript
键盘KeyCode值列表汇总
2013/11/26 Javascript
js style动态设置table高度
2014/10/21 Javascript
Javascript实现倒计时(防页面刷新)实例
2016/12/13 Javascript
一个例子轻松学会Vue.js
2017/01/02 Javascript
微信小程序 开发经验整理
2017/02/15 Javascript
Node.js学习之TCP/IP数据通讯(实例讲解)
2017/10/11 Javascript
浅谈vue引入css,less遇到的坑和解决方法
2018/01/20 Javascript
在Vue中使用Compass的方法
2018/03/02 Javascript
使用pm2部署node生产环境的方法步骤
2019/03/09 Javascript
[49:21]完美世界DOTA2联赛循环赛 Ink Ice vs LBZS BO2第二场 11.05
2020/11/06 DOTA
[55:35]DOTA2-DPC中国联赛 正赛 CDEC vs Dragon BO3 第二场 1月22日
2021/03/11 DOTA
Python collections模块实例讲解
2014/04/07 Python
python采用django框架实现支付宝即时到帐接口
2016/05/17 Python
Python中正反斜杠(‘/’和‘\’)的意义与用法
2019/08/12 Python
python 中Arduino串口传输数据到电脑并保存至excel表格
2019/10/14 Python
全网最详细的PyCharm+Anaconda的安装过程图解
2021/01/25 Python
html5中localStorage本地存储的简单使用
2017/06/16 HTML / CSS
html5中地理位置定位api接口开发应用小结
2013/01/04 HTML / CSS
HTML5 3D书本翻页动画的实现示例
2019/08/28 HTML / CSS
Habitat家居英国官方网站:沙发、家具、照明、厨房和户外
2019/12/12 全球购物
NET程序员上机面试题
2015/05/23 面试题
法学专业本科生自荐信范文
2013/12/17 职场文书
实习鉴定范文
2013/12/19 职场文书
弘扬雷锋精神活动演讲稿
2014/03/04 职场文书
党委干部批评与自我批评发言稿
2014/09/28 职场文书
朋友圈早安励志语录!
2019/07/08 职场文书
迎客户欢迎词三篇
2019/09/27 职场文书
导游词之无锡丝业博物馆
2019/11/12 职场文书
读《方与圆》有感:交友方圆有度
2020/01/14 职场文书
python pyhs2 的安装操作
2021/04/07 Python
Appium中scroll和drag_and_drop根据元素位置滑动
2022/02/15 Python
Windows Server 2016服务器用户管理及远程授权图文教程
2022/08/14 Servers