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 相关文章推荐
用Div仿showModalDialog模式菜单的效果的代码
Mar 05 Javascript
JavaScript iframe的相互操作浅析
Oct 14 Javascript
jQuery中$.fn的用法示例介绍
Nov 05 Javascript
深入理解JavaScript系列(30):设计模式之外观模式详解
Mar 03 Javascript
JS将滑动门改为选项卡(需鼠标点击)的实现方法
Sep 27 Javascript
jquery模拟实现鼠标指针停止运动事件
Jan 12 Javascript
js根据手机客户端浏览器类型,判断跳转官网/手机网站多个实例代码
Apr 30 Javascript
实例讲解Jquery中隐藏hide、显示show、切换toggle的用法
May 13 Javascript
微信小程序 获取设备信息 API实例详解
Oct 02 Javascript
图片懒加载插件实例分享(含解析)
Jan 09 Javascript
Bootstrap table使用方法记录
Aug 23 Javascript
angular6 填坑之sdk的方法
Dec 27 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 zend 相对路径问题
2009/01/12 PHP
php设计模式之装饰模式应用案例详解
2019/06/17 PHP
js 判断脚本加载完毕的代码
2011/07/13 Javascript
面向对象的Javascript之三(封装和信息隐藏)
2012/01/27 Javascript
把jQuery的类、插件封装成seajs的模块的方法
2014/03/12 Javascript
解决html按钮切换绑定不同函数后点击时执行多次函数问题
2014/05/14 Javascript
AngularJS 实现按需异步加载实例代码
2015/10/18 Javascript
KnockoutJS 3.X API 第四章之数据控制流foreach绑定
2016/10/10 Javascript
详解react使用react-bootstrap当轮子造车
2017/08/15 Javascript
JS操作时间 - UNIX时间戳的简单介绍(必看篇)
2017/08/16 Javascript
Vue 组件间的样式冲突污染
2017/08/31 Javascript
bootstrap可编辑下拉框jquery.editable-select
2017/10/12 jQuery
vue实现导航栏效果(选中状态刷新不消失)
2017/12/13 Javascript
ReactNative实现Toast的示例
2017/12/31 Javascript
从理论角度讨论JavaScript闭包
2019/04/03 Javascript
JS数组方法join()用法实例分析
2020/01/18 Javascript
ES6如何用一句代码实现函数的柯里化
2020/01/18 Javascript
js实现弹幕墙效果
2020/12/10 Javascript
JS实现京东商品分类侧边栏
2020/12/11 Javascript
python删除文件示例分享
2014/01/28 Python
Python中将变量按行写入txt文本中的方法
2018/04/03 Python
Python控制键盘鼠标pynput的详细用法
2019/01/28 Python
PyCharm搭建Spark开发环境实现第一个pyspark程序
2019/06/13 Python
如何利用Python识别图片中的文字
2020/05/31 Python
jupyter notebook快速入门及使用详解
2020/11/13 Python
python Scrapy爬虫框架的使用
2021/01/21 Python
如何判断一段程序是由C 编译程序还是由C++编译程序编译的
2013/08/04 面试题
班组长安全职责
2014/01/05 职场文书
五好党支部事迹材料
2014/02/06 职场文书
工作过失检讨书
2014/02/23 职场文书
互联网电子商务专业毕业生求职信
2014/03/18 职场文书
全国法制宣传日活动总结2014
2014/11/01 职场文书
政审证明材料
2015/06/19 职场文书
通过Qt连接OpenGauss数据库的详细教程
2021/06/23 PostgreSQL
六个好看实用的 HTML + CSS 后台登录入口页面
2022/04/28 HTML / CSS
win10电脑老是死机怎么办?win10系统老是死机的解决方法
2022/08/05 数码科技