vue項目打包部署跨域的實現(xiàn)步驟
跨源資源共享(CORS,或通俗地譯為跨域資源共享)是一種基于 HTTP 頭的機制,該機制通過允許服務器標示除了它自己以外的其他源(域、協(xié)議或端口),使得瀏覽器允許這些源訪問加載自己的資源??缭促Y源共享還通過一種機制來檢查服務器是否會允許要發(fā)送的真實請求,該機制通過瀏覽器發(fā)起一個到服務器托管的跨源資源的“預檢”請求。在預檢中,瀏覽器發(fā)送的頭中標示有 HTTP 方法和真實請求中會用到的頭??缭?HTTP 請求的一個例子:運行在 https://domain-a.com 的 JavaScript 代碼使用 XMLHttpRequest 來發(fā)起一個到 https://domain-b.com/data.json 的請求(也就是vue的axios,或者JQuery的ajax請求)。
出于安全性,瀏覽器限制腳本內發(fā)起的跨源 HTTP 請求。例如,XMLHttpRequest 和 Fetch API 遵循同源策略。這意味著使用這些 API 的 Web 應用程序只能從加載應用程序的同一個域請求 HTTP 資源,除非響應報文包含了正確 CORS 響應頭。
vue等前端工程在打包部署后,避免不了跨域問題。很讓人抓狂,尤其是新手。其實解決起來也不難。
1.前端工程解決辦法
1.1開發(fā)時候解決辦法
在vue的開發(fā)中可以配置代理,來解決跨域問題,以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項目打包后編譯成靜態(tài)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秒內,不需要再發(fā)送預檢驗請求,可以緩存該結果 ? ? ? ? ? ? } ? ? ? ? }; ? ? } }
在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秒內,不需要再發(fā)送預檢驗請求,可以緩存該結果 ? ? } }
到此這篇關于vue項目打包部署跨域的實現(xiàn)步驟的文章就介紹到這了,更多相關vue 打包部署跨域內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Vue + Node.js + MongoDB圖片上傳組件實現(xiàn)圖片預覽和刪除功能詳解
這篇文章主要介紹了Vue + Node.js + MongoDB圖片上傳組件實現(xiàn)圖片預覽和刪除功能,結合實例形式詳細分析了Vue + Node.js + MongoDB基于圖片上傳組件實現(xiàn)圖片預覽和刪除功能相關操作技巧,需要的朋友可以參考下2020-04-04vue-cli3 配置開發(fā)與測試環(huán)境詳解
這篇文章主要介紹了vue-cli3 配置開發(fā)與測試環(huán)境詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-05-05詳解Vue3中的watch偵聽器和watchEffect高級偵聽器
這篇文章主要介紹了Vue3中的watch偵聽器和watchEffect高級偵聽器,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-08-08