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插件之easing 动态菜单
Aug 21 Javascript
通过JQuery实现win8一样酷炫的动态磁贴效果(示例代码)
Jul 13 Javascript
浅析jquery ajax异步调用方法中不能给全局变量赋值的原因及解决方法
Jan 10 Javascript
js 动态修改css文件用到了cssRule
Aug 20 Javascript
bootstrap与Jquery UI 按钮样式冲突的解决办法
Sep 23 Javascript
vue2滚动条加载更多数据实现代码
Jan 10 Javascript
Vue.js学习之过滤器详解
Jan 22 Javascript
最常用的jQuery表单验证(简单)
May 23 jQuery
使用ajax的post同步执行(实现方法)
Dec 21 Javascript
AngularJS 应用模块化的使用
Apr 04 Javascript
Angular项目如何升级至Angular6步骤全纪录
Sep 03 Javascript
JavaScript前端面试扁平数据转tree与tree数据扁平化
Jun 14 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 计算两个时间戳相隔的时间的函数(小时)
2009/12/18 PHP
php获取指定日期之间的各个周和月的起止时间
2014/11/24 PHP
php+ajax实现无刷新动态加载数据技术
2015/04/28 PHP
Prototype使用指南之base.js
2007/01/10 Javascript
一段效率很高的for循环语句使用方法
2007/08/13 Javascript
Prototype Selector对象学习
2009/07/23 Javascript
使用滤镜设置透明导致 IE 6/7/8/9 解析异常的解决方法
2011/04/07 Javascript
jQuery在IE下使用未闭合的xml代码创建元素时的Bug介绍
2012/01/10 Javascript
JS获取select的value和text值的简单实例
2014/02/26 Javascript
jQuery滚动条插件nanoscroller使用指南
2015/04/21 Javascript
JavaScript中的getTime()方法使用详解
2015/06/10 Javascript
JavaScript tab选项卡插件实例代码
2016/02/23 Javascript
JavaScript驾驭网页-CSS与DOM
2016/03/24 Javascript
BootStrap 智能表单实战系列(十)自动完成组件的支持
2016/06/13 Javascript
基于JavaScript实现窗口拖动效果
2017/01/18 Javascript
浅谈js函数三种定义方式 & 四种调用方式 & 调用顺序
2017/02/19 Javascript
详解vue移动端日期选择组件
2018/02/22 Javascript
微信小程序实现图片翻转效果的实例代码
2019/09/20 Javascript
python 查找文件夹下所有文件 实现代码
2009/07/01 Python
Python生成密码库功能示例
2017/05/23 Python
Python使用selenium实现网页用户名 密码 验证码自动登录功能
2018/05/16 Python
Python 计算任意两向量之间的夹角方法
2019/07/05 Python
nginx黑名单和django限速,最简单的防恶意请求方法分享
2019/08/09 Python
python实现低通滤波器代码
2020/02/26 Python
python 制作网站小说下载器
2021/02/20 Python
魅力惠奢品线上平台:MEI.COM
2016/11/29 全球购物
新西兰便宜隐形眼镜购买网站:QUICKLENS New Zealand
2019/03/02 全球购物
卡骆驰德国官方网站:Crocs德国
2019/03/29 全球购物
人力资源部培训专员岗位职责
2014/01/02 职场文书
毕业证丢失证明
2014/01/15 职场文书
应聘文员自荐信范文
2014/03/11 职场文书
2014年党建工作汇报材料
2014/10/27 职场文书
检察院起诉意见书
2015/05/20 职场文书
青涩记忆观后感
2015/06/18 职场文书
关于PostgreSQL JSONB的匹配和交集问题
2021/09/14 PostgreSQL
SQL Server一个字符串拆分多行显示或者多行数据合并成一个字符串
2022/05/25 SQL Server