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 相关文章推荐
Mootools 1.2教程 同时进行多个形变动画
Sep 15 Javascript
JavaScript高级程序设计(第3版)学习笔记13 ECMAScript5新特性
Oct 11 Javascript
js动态给table添加/删除tr的方法
Aug 02 Javascript
jQuery拖拽 & 弹出层 介绍与示例
Dec 27 Javascript
jquery实现邮箱自动补全功能示例分享
Feb 17 Javascript
javascript实现阻止iOS APP中的链接打开Safari浏览器
Jun 12 Javascript
JS实现文件动态顺序载入的方法
Mar 07 Javascript
JavaScript转换二进制编码为ASCII码的方法
Apr 16 Javascript
javascript弹出窗口实现代码
Nov 12 Javascript
JS类的定义与使用方法深入探索
Nov 26 Javascript
vuejs+element UI点击编辑表格某一行时获取内容填入表单的示例
Oct 31 Javascript
vue接通后端api以及部署到服务器操作
Aug 13 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中使用Imagick实现图像直方图的实现代码
2011/08/30 PHP
浅析php中三个等号(===)和两个等号(==)的区别
2013/08/06 PHP
php实现邮件发送并带有附件
2014/01/24 PHP
PHP多态代码实例
2015/06/26 PHP
PHP 无限级分类
2017/05/04 PHP
javascript笔记 String类replace函数的一些事
2011/09/22 Javascript
JS连接SQL数据库与ACCESS数据库的方法实例
2013/11/21 Javascript
js 高效去除数组重复元素示例代码
2013/12/19 Javascript
javascript格式化json显示实例分析
2015/04/21 Javascript
javascript中一些util方法汇总
2015/06/10 Javascript
AngularJS中$interval的用法详解
2016/02/02 Javascript
JavaScript事件学习小结(一)事件流
2016/06/09 Javascript
详解JavaScript常量定义
2017/01/03 Javascript
EsLint入门学习教程
2017/02/17 Javascript
Node.js使用Express创建Web项目详细教程
2017/03/31 Javascript
慕课网题目之js实现抽奖系统功能
2017/09/19 Javascript
vue2.0使用swiper组件实现轮播的示例代码
2018/03/03 Javascript
VUE在for循环里面根据内容值动态的加入class值的方法
2018/08/12 Javascript
node中的cookie的具体使用
2018/09/13 Javascript
小程序scroll-view组件实现滚动的示例代码
2018/09/20 Javascript
详解基于webpack&gettext的前端多语言方案
2019/01/29 Javascript
原理深度解析Vue的响应式更新比React快
2020/04/04 Javascript
基于python实现的百度新歌榜、热歌榜下载器(附代码)
2019/08/05 Python
python实现XML解析的方法解析
2019/11/16 Python
英国领先的大码时装品牌之一:Elvi
2018/08/26 全球购物
澳大利亚最大的百货公司:Myer
2018/12/21 全球购物
幼师求职自荐信范文
2014/01/26 职场文书
霸王洗发水广告词
2014/03/14 职场文书
收款委托书范本
2014/09/11 职场文书
社区党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
写给医院的感谢信
2015/01/22 职场文书
2016年暑假学生家长评语
2015/12/01 职场文书
《我在为谁工作》:工作的质量往往决定生活的质量
2019/12/27 职场文书
新手入门Jvm-- JVM对象创建与内存分配机制
2021/06/18 Java/Android
python机器学习Github已达8.9Kstars模型解释器LIME
2021/11/23 Python