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 相关文章推荐
js身份证验证超强脚本
Oct 26 Javascript
javascript 在网页中的运用(asp.net)
Nov 23 Javascript
五段实用的js高级技巧
Dec 20 Javascript
JS Canvas定时器模拟动态加载动画
Sep 17 Javascript
vue之nextTick全面解析
May 17 Javascript
React 使用Hooks简化受控组件的状态绑定
Mar 18 Javascript
layui实现根据table数据判断按钮显示情况的方法
Sep 26 Javascript
浅谈vant组件Picker 选择器选单选问题
Nov 04 Javascript
Vue实现todo应用的示例
Feb 20 Vue.js
详解前端任务构建利器Gulp.js使用指南
Apr 30 Javascript
Vue的生命周期一起来看看
Feb 24 Vue.js
动态规划之使用备忘录来改进Javascript函数
Apr 07 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
PHP5中的this,self和parent关键字详解教程
2007/03/19 PHP
PHP爆绝对路径方法收集整理
2012/09/17 PHP
php实现用手机关闭计算机(电脑)的方法
2015/04/22 PHP
Thinkphp和onethink实现微信支付插件
2016/04/13 PHP
找出字符串中出现次数最多的字母和出现次数精简版
2012/11/07 Javascript
再谈Jquery Ajax方法传递到action(补充)
2014/05/12 Javascript
jQuery实现有动画淡出效果的二级折叠菜单代码
2015/10/17 Javascript
快速掌握Node.js中setTimeout和setInterval的使用方法
2016/03/21 Javascript
ajax实现加载页面、删除、查看详细信息 bootstrap美化页面!
2017/03/14 Javascript
vue 和vue-touch 实现移动端左右导航效果(仿京东移动站导航)
2017/04/22 Javascript
解决vue中无法动态修改jqgrid组件 url地址的问题
2018/03/01 Javascript
vue获取当前激活路由的方法
2018/03/17 Javascript
在vue中使用Autoprefixed的方法
2018/07/27 Javascript
js操作table中tr的顺序实现上移下移一行的效果
2018/11/22 Javascript
javascript实现自由编辑图片代码详解
2019/06/21 Javascript
[01:03:56]Mineski vs TNC 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
对Python进行数据分析_关于Package的安装问题
2017/05/22 Python
Python爬虫实现全国失信被执行人名单查询功能示例
2018/05/03 Python
python 获取图片分辨率的方法
2019/01/08 Python
Python+OpenCV采集本地摄像头的视频
2019/04/25 Python
浅谈Python小波分析库Pywavelets的一点使用心得
2019/07/09 Python
Python底层封装实现方法详解
2020/01/22 Python
Python定义一个函数的方法
2020/06/15 Python
基于 HTML5 WebGL 实现的垃圾分类系统
2019/10/08 HTML / CSS
HTML5自定义data-* data(obj)属性和jquery的data()方法的使用
2012/12/13 HTML / CSS
phonegap常用事件总结(必看篇)
2017/03/31 HTML / CSS
Invicta手表官方商店:百年制表历史的瑞士腕表品牌
2019/09/26 全球购物
颇特女士香港官网:NET-A-PORTER香港
2021/03/08 全球购物
光荣入党自我鉴定
2014/01/22 职场文书
喝酒检查书范文
2014/02/23 职场文书
2014年学习雷锋活动总结
2014/03/01 职场文书
高中班级口号
2014/06/09 职场文书
民主生活会剖析材料
2014/09/30 职场文书
车间主任岗位职责范本
2015/04/08 职场文书
完美解决golang go get私有仓库的问题
2021/05/05 Golang
Python中的datetime包与time包包和模块详情
2022/02/28 Python