vue项目打包部署跨域的实现步骤

 更新时间:2023年05月15日 14:29:45   作者:义龙陳序员  
在前端 Vue 项目打包后,如果需要访问另一个域名下的接口,由于浏览器的同源策略限制,会出现跨域问题,本文就介绍一下vue项目打包部署跨域的实现步骤,感兴趣的可以了解一下

跨源资源共享(CORS,或通俗地译为跨域资源共享)是一种基于 HTTP 头的机制,该机制通过允许服务器标示除了它自己以外的其他源(域、协议或端口),使得浏览器允许这些源访问加载自己的资源。跨源资源共享还通过一种机制来检查服务器是否会允许要发送的真实请求,该机制通过浏览器发起一个到服务器托管的跨源资源的“预检”请求。在预检中,浏览器发送的头中标示有 HTTP 方法和真实请求中会用到的头。跨源 HTTP 请求的一个例子:运行在 https://domain-a.com 的 JavaScript 代码使用 XMLHttpRequest 来发起一个到 https://domain-b.com/data.json 的请求(也就是vue的axios,或者JQuery的ajax请求)。

出于安全性,浏览器限制脚本内发起的跨源 HTTP 请求。例如,XMLHttpRequest 和 Fetch API 遵循同源策略。这意味着使用这些 API 的 Web 应用程序只能从加载应用程序的同一个域请求 HTTP 资源,除非响应报文包含了正确 CORS 响应头。

vue等前端工程在打包部署后,避免不了跨域问题。很让人抓狂,尤其是新手。其实解决起来也不难。

1.前端工程解决办法

1.1开发时候解决办法

在vue的开发中可以配置代理,来解决跨域问题,以vue3的vite为例:
比如我们的后端接口地址前缀为:http://192.168.1.2/api/v1/,在vite中就可以这样配置代理:

# 跨域代理,您可以配置多个 ,请注意,没有换行符
VITE_PROXY = [["/api/v1","http://192.168.1.2/api/v1"]]
#接口地址(程序中使用的地址)
VITE_API_URL=/api/v1

1.2打包部署后解决办法

vue项目打包后编译成静态js了,vite的代理就不能用了,一般我们都是用nginx来直接部署打包后的程序,我们就可以在nginx中配置反向代理来解决:

server{
	listen 80;
	server_name localhost;
	index    index.html index.htm;
	root   /var/www/dist;
	error_log   logs/localhost_error.log crit;
	access_log  logs/localhost_access.log  access;
	# 接口地址反代
    location /api/v1/ {
	    proxy_pass http://192.168.1.2/api/v1/;
	    proxy_redirect off;
	    proxy_set_header HOST $host;
	    proxy_set_header X-Real-IP $remote_addr;
	    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	    proxy_set_header X-Forwarded-Proto  $scheme;
	}
	rewrite ^(.*)\;(.*)$ $1 last;
	location ~* \.(eot|ttf|woff|woff2|svg|otf|html|htm|pdf|PDF|mp4|MP4)$ {
		add_header Access-Control-Allow-Origin *;
	}
	add_header Access-Control-Allow-Origin *;
}

2.后端工程解决办法

也可以在后端工程中配置跨域,在springboot中新建CorsConfig.java配置类,在其中加入如下Bean:

在Spring WebMvc中:

package com.example.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpHeaders;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class CorsConfig implements WebMvcConfigurer {
    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurer() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/**")
                    .allowedOriginPatterns("*") //允许跨域的域名,可以用*表示允许任何域名使用
                    .allowedMethods("*") //允许任何方法(post、get等)
                    .allowedHeaders("*") //允许任何请求头
                    .allowCredentials(true) //带上cookie信息
                    .exposedHeaders(HttpHeaders.SET_COOKIE)
                    .maxAge(3600L); //maxAge(3600)表明在3600秒内,不需要再发送预检验请求,可以缓存该结果
            }
        };
    }
}

在Spring WebFlux中:

package com.example.config;
import org.springframework.boot.autoconfigure.AutoConfigureOrder;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.http.HttpHeaders;
import org.springframework.web.reactive.config.CorsRegistry;
import org.springframework.web.reactive.config.EnableWebFlux;
import org.springframework.web.reactive.config.WebFluxConfigurer;
@Configuration
public class CorsConfig implements WebFluxConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
       registry.addMapping("/**")
                    .allowedOriginPatterns("*") //允许跨域的域名,可以用*表示允许任何域名使用
                    .allowedMethods("*") //允许任何方法(post、get等)
                    .allowedHeaders("*") //允许任何请求头
                    .allowCredentials(true) //带上cookie信息
                    .exposedHeaders(HttpHeaders.SET_COOKIE)
                    .maxAge(3600L); //maxAge(3600)表明在3600秒内,不需要再发送预检验请求,可以缓存该结果
    }
}

到此这篇关于vue项目打包部署跨域的实现步骤的文章就介绍到这了,更多相关vue 打包部署跨域内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 基于vue+canvas的excel-like组件实例详解

    基于vue+canvas的excel-like组件实例详解

    a vue component,基于vue的表格组件,主要解决大数据量的表格渲染性能问题,使用canvas绘制表格,同时支持类似excel的批量选中,复制黏贴删除,实时编辑等功能.这篇文章主要介绍了基于vue+canvas的excel-like组件,需要的朋友可以参考下
    2017-11-11
  • swiper/vue 获取 swiper实例方法详解

    swiper/vue 获取 swiper实例方法详解

    在网上搜了一下如何调用swiper实例,大部分都是通过 swiperRef = new Swiper(‘.swiper’, options) 这种方法初始化swiper,然后直接能用 swiperRef 实例,这篇文章主要介绍了swiper/vue 获取 swiper实例方法详解,需要的朋友可以参考下
    2023-12-12
  • vue-cli3 设置端口号(81)无效的解决

    vue-cli3 设置端口号(81)无效的解决

    这篇文章主要介绍了vue-cli3 设置端口号(81)无效的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • 详解如何搭建mpvue框架搭配vant组件库的小程序项目

    详解如何搭建mpvue框架搭配vant组件库的小程序项目

    这篇文章主要介绍了详解如何搭建mpvue框架搭配vant组件库的小程序项目,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • vue+springboot+element+vue-resource实现文件上传教程

    vue+springboot+element+vue-resource实现文件上传教程

    这篇文章主要介绍了vue+springboot+element+vue-resource实现文件上传教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • Vue Electron实现输入法自动刷字数功能详解

    Vue Electron实现输入法自动刷字数功能详解

    这篇文章主要介绍了Vue Electron实现输入法自动刷字数功能,文中的示例代码讲解详细,对我们学习C#有一定的帮助,感兴趣的小伙伴可以跟随小编一起了解一下
    2022-12-12
  • vue3使用自定义指令实现el dialog拖拽功能示例详解

    vue3使用自定义指令实现el dialog拖拽功能示例详解

    这篇文章主要为大家介绍了vue3使用自定义指令实现el dialog拖拽功能示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • 解决elementUI 切换tab后 el_table 固定列下方多了一条线问题

    解决elementUI 切换tab后 el_table 固定列下方多了一条线问题

    这篇文章主要介绍了解决elementUI 切换tab后 el_table 固定列下方多了一条线问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • vue项目中常见问题及解决方案(推荐)

    vue项目中常见问题及解决方案(推荐)

    这篇文章主要介绍了vue项目中常见问题及解决方案,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10
  • 详解从Vue-router到html5的pushState

    详解从Vue-router到html5的pushState

    这篇文章主要介绍了详解从Vue-router到html5的pushState,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07

最新评论