在前端項目中是如何解決跨域的


📘 前端項目中跨域問題及解決方式詳解(Vite 項目)


一、🌐 什么是跨域?

跨域(Cross-Origin) 指的是在瀏覽器中,前端頁面與服務器之間的協議、域名或端口不一致而引發的安全限制。

? 瀏覽器的同源策略(Same-Origin Policy)

瀏覽器只允許前端訪問同源資源

  • 協議相同(http/https)

  • 域名相同(localhost/example.com)

  • 端口相同(:3000 / :5173)


二、?? 跨域的典型場景

本地開發環境(Vite):

  • 頁面地址:http://localhost:5173

  • 接口地址:https://api.xxx.com

你請求:

fetch('https://api.xxx.com/user/list')

會被瀏覽器攔截,提示:跨域訪問被阻止(CORS error)


三、🚀 如何在 Vite 項目中解決跨域?

? 方法:使用 Vite 的代理功能 server.proxy

讓本地開發服務器(Vite 內部基于 Node.js 的 server)做代理請求,從而避開瀏覽器的跨域檢查。

🔧 配置方式如下:

// vite.config.js / vite.config.ts
export default defineConfig({server: {proxy: {'/api': {target: 'https://api.xxx.com', // 實際接口地址changeOrigin: true,            // 更改請求頭中的 originrewrite: path => path.replace(/^\/api/, '') // 重寫路徑}}}
})

四、🔄 請求轉發流程圖解

你寫的代碼:
fetch('/api/user/list')↓ 實際發起請求http://localhost:5173/api/user/list(本地,不跨域)↓ 被 Vite dev server 攔截轉發請求到:
https://api.xxx.com/user/list↓ 后端正常響應Vite 收到響應后返回給前端

? 瀏覽器認為請求仍是同源(localhost:5173),所以不會攔截。


五、📌 proxy 配置參數詳解

配置項說明
target要代理轉發的目標地址
changeOrigin是否更改請求頭中的 origin 字段(大多數后端要求為 true)
rewrite重寫路徑(如把 /api/user 轉為 /user

六、📦 項目部署后是否還需要代理?

不需要!

生產環境打包后,頁面與接口通常部署在同一個主域名或使用 nginx 做反向代理,此時不會跨域。

但如果接口仍然來自其他域名:

  • ? 后端需配置 CORS 響應頭

  • 或使用 nginx / 網關代理解決


在項目中,本地開發階段我通過配置 Vite 的 server.proxy/api 請求代理到真實后端接口,解決瀏覽器的跨域限制問題。這樣前端請求看似是本地同源,其實由 Vite 的開發服務器中轉并轉發到目標后端,避免了 CORS 錯誤。

上線后通常不需要 proxy,接口一般會部署到同域名,或由網關統一做轉發。


🧩 一、Webpack 中如何解決跨域?

Webpack 本身不具備跨域代理功能,但它內置的開發服務器 —— webpack-dev-server 提供了代理(proxy)功能,可以實現與 Vite 類似的跨域解決方案。

? 常用方式:配置 devServer.proxy

示例:webpack.config.js

module.exports = {// ... 其他配置devServer: {proxy: {'/api': {target: 'https://api.xxx.com',   // 實際后端地址changeOrigin: true,              // 修改 origin 頭,防止被后端拒絕pathRewrite: { '^/api': '' },    // 可選:去除路徑中的 /api}}}
}

🔁 工作原理:

跟 Vite 類似:

前端請求:     http://localhost:8080/api/user/list
webpack dev server 攔截并轉發給:https://api.xxx.com/user/list

🆚 二、Vite vs Webpack 的跨域代理配置區別

項目Webpack (webpack-dev-server)Vite (vite.config.js)
配置位置devServer.proxyserver.proxy
是否原生支持需要依賴 webpack-dev-server原生支持
路徑重寫pathRewrite: { '^/api': '' }rewrite: path => path.replace(/^\/api/, '')
修改 OriginchangeOrigin: truechangeOrigin: true
支持 WebSocket需要配置 ws: true默認支持
是否用 ES Module基于 CommonJS 配置基于 ESM 配置(支持 TypeScript)
適配調試體驗相對稍復雜,熱更新速度慢快速熱更新,默認支持現代瀏覽器特性

🧠 面試回答建議

在使用 Webpack 進行本地開發時,我們通過配置 devServer.proxy 來實現接口代理,將以 /api 開頭的請求代理到后端真實地址,以解決開發過程中的跨域問題。這個機制與 Vite 的 server.proxy 類似,都是由本地開發服務器中轉,避免瀏覽器 CORS 限制。

不同點在于,Vite 使用的是原生 ES 模塊和現代瀏覽器特性,配置更加簡潔,啟動和熱更新更快;Webpack 配置稍復雜但生態成熟,適用于老項目或對構建控制要求較高的場景。


? 總結一句話

Webpack 和 Vite 都通過“本地開發服務器代理”的方式解決跨域,本質一致,但 Vite 配置更簡單,開發體驗更好。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/91030.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/91030.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/91030.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

代碼審計-Struts2漏洞分析

一、Struts2介紹 Struts2 是一個基于 MVC(Model-View-Controller) 設計模式的開源 Java Web 應用框架,由 Apache 軟件基金會維護。它是 Struts1 和 WebWork 框架的整合產物,以 WebWork 為核心,通過攔截器機制實現業務邏…

三、神經網絡——網絡優化方法

三、網絡優化方法 1.梯度下降算法梯段下降算法是一種尋找使損失函數最小化的方法,從數學上的角度來看,梯度的方向是函數增長速度最快的方向,那么梯度的反方向就是函數減少最快的方向,所以有WijnewWijold?η?E?WijW_{ij}^{new} …

HTML/JOSN復習總結

HTML 基礎 什么是 HTML? 1.HTML是一門語言,所有的網頁都是用HTML這門語言編寫出來的 2.HTML(HyperText Markup Language):超文本標記語言。 >超文本:超越了文本的限制,比普通文本更強大。除了文字信息,還可以定義圖片、音頻、視頻等內…

Golang中的內置類型

A. int B. string C. struct D. array 首先,內置類型是指不需要引入任何關于這些數據類型的包,就可以引用的數據類型。那么,內置類型主要包括基本類型,復合類型,控制并發,高級抽象,特殊類型。…

通過命名空間引用了 Application 類,php不會自動包含路徑文件嗎?

示例代碼:報錯提示找不到Application類 use mvc\core\Application;$app new Application(); // 定義路由 $app->get(/, HomeControllerindex); $app->get(/user, UserControllershow); $app->post(/user, UserControllercreate);// 運行應用 $app->run…

PlantUML 基礎使用技術文檔

目錄 摘要 1. 什么是 PlantUML 2. 安裝與環境配置 2.1 本地使用 2.2 在線使用 3. 基本語法 3.1 示例:系統架構圖 3.2 常用元素 4. 渲染方式 4.1 VSCode 4.2 在線渲染 4.3 生成圖片 5. 推薦實踐 6. 常見圖類型 7. 進階功能 8. 典型應用場景 摘要 Pl…

Android Notification 通過增加addAction 跳轉回Service重新執行邏輯

1.場景描述在App內升級過程中,apk下載過程中網絡波動導致連接超時,下載失敗后Service生命周期結束。前臺通知也被清除。2.解決思路在通知欄中增加重試按鈕重啟下載服務。3.代碼NotificationManager mNotificationManager (NotificationManager) getSy…

帶貨視頻評論的用戶洞察 科大訊飛AI算法賽 Datawhale AI夏令營

賽題 2025 iFLYTEK AI開發者大賽https://challenge.xfyun.cn/topic/info?typevideo-comment-insight 一、賽事背景 在電商直播爆發式增長的數字化浪潮下,短視頻平臺積累了海量帶貨視頻及用戶互動數據。這些數據不僅是消費者對商品體驗的直接反饋,更蘊…

JAVA生成PDF(itextpdf)

java生成PDF有多種方式&#xff0c;比如itextpdf、 Apache PDFBox、Flying Saucer (XHTMLRenderer)、 OpenPDF等。今天要介紹的是itextpdf&#xff0c;及在開發過程中處理的問題。1. 引入POM<!--PDF導出POM--><dependency><groupId>com.itextpdf</groupId…

[爬蟲知識] 深入理解多進程/多線程/協程的異步邏輯

相關爬蟲實戰案例&#xff1a;[爬蟲實戰] 多進程/多線程/協程-異步爬取豆瓣Top250 相關爬蟲專欄&#xff1a;JS逆向爬蟲實戰 爬蟲知識點合集 爬蟲實戰案例 逆向知識點合集 前言&#xff1a; 面對海量的目標數據&#xff0c;傳統單線程、同步的爬取方式往往效率低下&#x…

Oracle RAC 11.2.0.4 更新SYSASM和SYS密碼

前言 從技術角度看&#xff0c;SYSASM是Oracle 10g R2引入的ASM管理員角色&#xff0c;而SYS是數據庫實例的超級用戶&#xff0c;SYS賬戶無法管理ASM磁盤組。SYSASM權限是集群級別的&#xff0c;比如在添加磁盤組時&#xff0c;這個操作會影響所有節點&#xff1b;而SYS用戶的權…

Vue》》總結

官網 vue路由的query參數、mixin 混入 vue cli 腳手架之配置代理 VUE SAP、 MPA&#xff0c;&#xff0c;組件開發、VDOM、雙向數據綁定 Vue Props 、Mixin 、路由守衛 vue router query參數 Vue props以及其他通信方式, vue響應式 原理 追加響應式數據&#xff0c;數組響應式 …

Nginx 中的負載均衡策略

Nginx 是一個高性能的 HTTP 和反向代理服務器&#xff0c;廣泛用于負載均衡場景。它支持多種負載均衡策略&#xff0c;可以幫助你優化資源利用、提高響應速度和增加系統的可用性。以下是 Nginx 中幾種常見的負載均衡策略及其配置方法&#xff1a; 1. 輪詢&#xff08;Round Rob…

用 Python 將分組文本轉為 Excel:以四級詞匯為例的實戰解析

一、背景引入&#xff1a;從“人工整理”到“自動化處理”的轉變 在英語學習過程中&#xff0c;我們經常會接觸各種分組整理的詞匯表&#xff0c;比如“Group1”對應一組單詞及釋義&#xff0c;隨后是“Group2”、“Group3”等等。如果你下載了一個 .txt 格式的四級詞匯表&…

Ffmpeg濾鏡

打開設備 添加濾鏡 循環錄制文件 #include "libavdevice/avdevice.h" #include "libavformat/avformat.h" #include "libavcodec/avcodec.h" #include "libavfilter/avfilter.h" #include "libavfilter/buffersink.h" #incl…

HarmonyOS AI輔助編程工具(CodeGenie)UI生成

UI Generator基于BitFun Platform AI能力平臺&#xff0c;用于快速生成可編譯、可運行的HarmonyOS UI工程&#xff0c;支持基于已有UI布局文件&#xff08;XML&#xff09;&#xff0c;快速生成對應的HarmonyOS UI代碼&#xff0c;其中包含HarmonyOS基礎工程、頁面布局、組件及…

【第三節】ubuntu server配置遠程連接

首先在ubuntu server中查看ip&#xff0c;打開虛擬機&#xff0c;輸入ip addr show ,這個命令很好記&#xff0c;幾乎就是英文自然語言 下面我們準備遠程連接工具&#xff0c;我選擇的開源的ET&#xff0c;全稱是electerm,圈起來的是必須輸入的內容&#xff0c;輸入完成后點擊保…

CCS-MSPM0G3507-7-模塊篇-MPU6050的基本使用

前言本篇我們接收對MPU6050的基本使用&#xff0c;獲取ID&#xff0c;通過IIC協議獲取寄存器的值&#xff0c;至于高級濾波算法&#xff0c;比如卡爾曼濾波&#xff0c;或者上面的&#xff0c;后面再更新基本配置最好選擇PA0和PA1&#xff0c;5V開漏然后給上代碼MPU6050.c#incl…

spring-ai agent概念

目錄agent 概念理解記憶能力工具計劃agent 概念理解 agent 智能體&#xff0c;突出智能 大模型的感覺 告訴你怎么做&#xff08;也不一定正確&#xff09;不會幫你做 Agent的感覺 直接準確的幫你做完&#xff08;比如&#xff0c;告訴 AI Agent 幫忙下單一份外賣&#xff0c…

NO.4數據結構數組和矩陣|一維數組|二維數組|對稱矩陣|三角矩陣|三對角矩陣|稀疏矩陣

數組的儲存 【定義】 數組&#xff1a; 由 n&#xff08;≥1&#xff09; 個相同類型的數據元素構成的有限序列&#xff0c; 是線性表的推廣。 一旦被定義&#xff0c; 維數和長度就不可再改變&#xff0c; 一般對其只有元素的存取和修改操作。 一維數組 Arr[a0,…,an?1] Arr[…