springboot+Vue项目使用axios实现跨域(CROS)

一、项目背景

本文中主要使用springboot项目做后端,Vue做前端,前后端使用axios实现数据交互,前后端分别部署情况:

项目 部署域名
springboot后台项目 http://localhost:8081
vue前端项目 http://localhost:8080

由于前后端部署在两个不同端口下就涉及到了跨域概念。

二、跨域资源共享 CORS 详解

CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。

它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制,这里引用了一篇文章详细的讲解了CROS的内部机制,非常详细,请参阅:

跨域资源共享 CORS 详解

三、axios跨域实现

3.1 安装qs模块

qs 是一个增加了一些安全性的查询字符串解析和序列化字符串的库。
QS官方文档

安装方式

	npm i qs -save

在使用的模块中引入

	import qs from "qs";

主要方法示例:

  • qs.parse(string, [options]) 将请求参数字符串转成对象
	var obj = qs.parse('a=c');
	//输出 {
    a: 'c' }
	
	qs.parse('foo[bar]=baz');
	//输出
	//foo: {
   
    //    bar: 'baz'
    //}
	qs.parse('foo[bar][baz]=foobarbaz');
	//输出
	//foo: {
   
    //    bar: {
   
    //        baz: 'foobarbaz'
    //    }
    //}
	qs.parse('a=b;c=d', {
    delimiter: ';' });
	//输出 {
    a: 'b', c: 'd' }
	//等等还有好多使用方法请参照官方文档
  • qs.stringify(object, [options])将对象转成查询字符串
	qs.stringify({
    a: 'b' })
	//输出 a=b
	
	qs.stringify({
    a: {
    b: 'c' } })
	//输出 a%5Bb%5D=c
	
	qs.stringify({
    a: {
    b: 'c' } }, {
    encode: false })
	//输出 a[b]=c
	
	qs.stringify({
    a: ['b', 'c', 'd'] });
	//输出 'a[0]=b&a[1]=c&a[2]=d'

	qs.stringify({
    a: ['b', 'c', 'd'] }, {
    indices: false });
	//输出 'a=b&a=c&a=d'

3.2 axios使用

如果axios不会安装,请参阅上一篇文章在新建项目中引用axios章节

  1. 首先在项目根目录下简历一个util文件夹用来存放项目要是用到的工具类
  2. 在util文件夹中新建httpconfig.js文件,用来配置axios全局设置,具体设置代码如下:
import axios from "axios";

// 覆写库的正式环境的路径,开发环境及测试环境设置请求到/api
//process.env.NODE_ENV === 'production' 生产环境
//process.env.NODE_ENV === 'development' 开发环境
//process.env.NODE_ENV === 'test' 测试环境
axios.defaults.baseURL = process.env.NODE_ENV === 'production' ? "http://localhost:8081" :"/api";
// 现在,在超时前,所有请求都会等待 30 秒
axios.defaults.timeout = 30000;
// 添加请求拦截器
axios.interceptors.request.use(function (config) {
   
	//在此处设置请求发送前的各种配置信息,具体congfig内容参见axios文档http://www.axios-js.com/zh-cn/docs/
    // 在发送请求前配置token请求头
    //config.headers['token'] = "tokenaxcs234";
    //开启跨域携带cookie
    config.withCredentials=true;
    return config;
}, function (error) {
   
    // 对请求错误做些什么
    return Promise.reject(error);
});

// 添加响应拦截器
axios.interceptors.response.use(function (response) {
   
    // 对响应数据做点什么
    //var token = response.headers.token;
    //console.log(token)
    return response;
}, 
  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值