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 相关文章推荐
JavaScript 基础篇(一)
Mar 30 Javascript
JavaScript的作用域和块级作用域概念理解
Sep 21 Javascript
jQuery中toggle()函数的使用实例
Apr 17 Javascript
理解javascript中try...catch...finally
Dec 25 Javascript
jQuery实现鼠标选文字发新浪微博的方法
Apr 02 Javascript
JS正则替换掉小括号及内容的方法
Nov 29 Javascript
JS数组返回去重后数据的方法解析
Jan 03 Javascript
js点击时关闭该范围下拉菜单之外的菜单方法
Jan 11 Javascript
使用angularjs.foreach时return的问题解决
Sep 30 Javascript
深入理解vue-class-component源码阅读
Feb 18 Javascript
JS实现横向跑马灯效果代码
Apr 20 Javascript
javascript中call,apply,bind的区别详解
Dec 11 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危险函数(disable_functions)
2012/02/23 PHP
PHP 第二节 数据类型之字符串类型
2012/04/28 PHP
PHP sprintf() 函数的应用(定义和用法)
2012/06/29 PHP
php实现遍历目录并删除指定文件中指定内容
2015/01/21 PHP
layui数据表格自定义每页条数limit设置
2019/10/26 PHP
Thinkphp 框架扩展之Widget扩展实现方法分析
2020/04/23 PHP
Javascript String对象扩展HTML编码和解码的方法
2009/06/02 Javascript
jQuery-Tools-overlay 使用介绍
2012/07/14 Javascript
有关javascript的性能优化 (repaint和reflow)
2013/04/12 Javascript
Jquery为a标签的href赋值实现代码
2013/05/03 Javascript
JavaScript中的alert()函数使用技巧详解
2014/12/29 Javascript
浅谈JS中逗号运算符的用法
2016/06/12 Javascript
jQuery插件zTree实现的基本树与节点获取操作示例
2017/03/08 Javascript
windows下vue.js开发环境搭建教程
2017/03/20 Javascript
详解http访问解析流程原理
2017/10/18 Javascript
angular2中Http请求原理与用法详解
2018/01/11 Javascript
Python读大数据txt
2016/03/28 Python
Python爬虫之模拟知乎登录的方法教程
2017/05/25 Python
Python语言生成水仙花数代码示例
2017/12/18 Python
用Python下载一个网页保存为本地的HTML文件实例
2018/05/21 Python
python实现点对点聊天程序
2018/07/28 Python
Python 时间戳之获取整点凌晨时间戳的操作方法
2020/01/28 Python
如何基于matlab相机标定导出xml文件
2020/11/02 Python
英国床和浴室商场:Bed & Bath Emporium
2018/05/20 全球购物
香港连卡佛百货官网:Lane Crawford
2019/09/04 全球购物
应用服务器有那些
2012/01/19 面试题
小学开学寄语
2014/01/19 职场文书
四年级下册教学反思
2014/02/01 职场文书
青年志愿者事迹材料
2014/02/07 职场文书
售后服务经理岗位职责
2014/02/25 职场文书
《月亮湾》教学反思
2014/04/14 职场文书
公路施工安全责任书
2015/05/08 职场文书
会议室使用管理制度
2015/08/06 职场文书
2019旅游导游工作总结
2019/06/27 职场文书
详解用Python把PDF转为Word方法总结
2021/04/27 Python
Android中的Launch Mode详情
2022/06/05 Java/Android