Vite環境下解決跨域問題

在 Vite 開發環境中,可以通過配置代理來解決跨域問題。以下是具體步驟:

  1. 在項目根目錄下找到?vite.config.js?文件:如果沒有,則需要創建一個。
  2. 配置代理:在?vite.config.js?文件中,使用?server.proxy?選項來設置代理規則。例如,如果你的后端服務器運行在?http://localhost:5054?,而你的 Vite 開發服務器運行在?http://localhost:3000?,你可以這樣配置:
  3. javascript
import { defineConfig } from 'vite';export default defineConfig({server: {proxy: {'/api': {target: 'http://localhost:5054',changeOrigin: true,rewrite: (path) => path.replace(/^\/api/, '')}}}
});

上述代碼中,/api?是代理的路徑前綴。當瀏覽器發送以?/api?開頭的請求時,Vite 會將請求代理到?http://localhost:5054?上,并去除路徑中的?/api?前綴。changeOrigin?設置為?true?,表示修改請求頭中的?Origin?字段,使其與目標服務器的域名一致,以避免跨域錯誤。

4.在前端代碼中使用代理路徑:修改你的?axios?請求地址,使用代理路徑。例如:

const service = axios.create({ baseURL: '/api' });
const response = service.get('User/1/2');

這樣,原本跨域的請求就會通過代理服務器轉發,從而解決跨域問題。

如果不想在?vite.config.js?中配置代理,也可以使用瀏覽器的擴展程序來解決跨域問題,如?Allow CORS: Access-Control-Allow-Origin?等。安裝并啟用擴展程序后,它會在瀏覽器層面允許跨域請求,不過這種方法只適用于開發環境,生產環境中還是需要在服務器端進行配置。

代碼圖示

5.原理

請求攔截

瀏覽器的同源策略限制了從一個域向另一個不同域(協議、域名、端口任一不同)發起請求。在開發環境中,Vite 開發服務器可配置為代理服務器。當瀏覽器發出請求時,Vite 服務器會監聽所有請求 。如果請求的 URL 匹配在vite.config.js中配置的代理規則前綴(比如示例中的/api?),Vite 服務器就會攔截該請求,不再讓瀏覽器直接向目標地址發送請求,從而繞過瀏覽器同源策略的限制。

轉發請求

Vite 服務器攔截請求后,會將其轉發到在代理規則中指定的目標服務器(例如配置中的http://localhost:5054?)。這一過程中,Vite 服務器充當了中間人的角色,代替瀏覽器與目標服務器進行通信。由于服務器與服務器之間通信不受同源策略限制,所以能順利將請求發送到后端服務器。

改變請求源

為避免目標服務器因請求來源問題拒絕請求,Vite 服務器會修改請求頭中的HostOrigin字段 。通過將changeOrigin設置為true,Vite 服務器會調整請求的源信息,使請求看起來像是從目標服務器的域發出的,確保目標服務器能夠正常接收并處理請求。

路徑重寫

在將請求轉發到目標服務器之前,Vite 服務器會根據配置的rewrite函數對請求路徑進行重寫 。比如在示例中rewrite: (path) => path.replace(/^\/api/, '')?,會把請求路徑中匹配/api前綴的部分去除,保證請求到達目標服務器時路徑正確,使后端服務器能正確處理請求。

響應轉發

目標服務器處理完請求后,將響應返回給 Vite 服務器,Vite 服務器再把響應轉發回前端應用。前端應用接收到的響應就如同是直接從目標服務器獲取的一樣,整個代理過程對前端應用透明,前端開發者無需關心請求轉發的具體細節,只需像正常請求一樣發起請求即可。

需注意,Vite 這種代理機制主要用于開發環境,在生產環境中,通常需要后端服務正確配置 CORS(跨域資源共享) 或者將前端和后端部署在同一域下,來確保跨域請求能正常處理。

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

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

相關文章

交換機與ARP

交換機與 ARP(Address Resolution Protocol,地址解析協議) 的關系主要體現在 局域網(LAN)內設備通信的地址解析與數據幀轉發 過程中。以下是二者的核心關聯: 1. 基本角色 交換機:工作在 數據鏈…

【Spring】小白速通AOP-日志記錄Demo

這篇文章我將通過一個最常用的AOP場景-方法調用日志記錄&#xff0c;帶你徹底理解AOP的使用。例子使用Spring BootSpring AOP實現。 如果對你有幫助可以點個贊和關注。謝謝大家的支持&#xff01;&#xff01; 一、Demo實操步驟&#xff1a; 1.首先添加Maven依賴 <!-- Sp…

git功能點管理

需求&#xff1a; 功能模塊1 已經完成&#xff0c;已經提交并推送到遠程&#xff0c;準備交給測試。功能模塊2 已經完成&#xff0c;但不提交給測試&#xff0c;繼續開發。功能模塊3 正在開發中。 管理流程&#xff1a; 創建并開發功能模塊1&#xff1a; git checkout main…

QGIS實戰系列(六):進階應用篇——Python 腳本自動化與三維可視化

歡迎來到“QGIS實戰系列”的第六期!在前幾期中,我們從基礎操作到插件應用逐步提升了 QGIS 技能。這一篇,我們將邁入進階領域,探索如何用 Python 腳本實現自動化,以及如何創建三維可視化效果,讓你的 GIS 項目更高效、更立體。 第一步:Python 腳本自動化 QGIS 內置了 Py…

高德地圖 3D 渲染-區域紋理圖添加

引入-初始化地圖&#xff08;關鍵代碼&#xff09; // 初始化頁面引入高德 webapi -- index.html 文件 <script src https://webapi.amap.com/maps?v2.0&key您申請的key值></script>// 添加地圖容器 <div idcontainer ></div>// 地圖初始化應該…

ffmpeg視頻轉碼相關

ffmpeg視頻轉碼相關 簡介參數 實戰舉栗子獲取視頻時長視頻轉碼mp4文件轉為hls m3u8 ts等文件圖片轉視頻抽取視頻第一幀獲取基本信息 轉碼日志輸出詳解轉碼耗時測試 簡介 FFmpeg 是領先的多媒體框架&#xff0c;能夠解碼、編碼、 轉碼、復用、解復用、流、過濾和播放 幾乎所有人…

【ISP】HDR技術中Sub-Pixel與DOL的對比分析

一、原理對比 Sub-Pixel&#xff08;空間域HDR&#xff09; ? 核心機制&#xff1a;在單個像素內集成一大一小兩個子像素&#xff08;如LPD和SPD&#xff09;&#xff0c;利用其物理特性差異&#xff08;靈敏度、滿阱容量&#xff09;同時捕捉不同動態范圍的信號。 ? 大像素&…

Vulnhub-IMF靶機

本篇文章旨在為網絡安全滲透測試靶機教學。通過閱讀本文&#xff0c;讀者將能夠對滲透Vulnhub系列IMF靶機有一定的了解 一、信息收集階段 靶機下載地址&#xff1a;https://www.vulnhub.com/entry/imf-1,162/ 因為靶機為本地部署虛擬機網段&#xff0c;查看dhcp地址池設置。得…

Linux內核中TCP協議棧的實現:tcp_close函數的深度剖析

引言 TCP(傳輸控制協議)作為互聯網協議族中的核心協議之一,負責在不可靠的網絡層之上提供可靠的、面向連接的字節流服務。Linux內核中的TCP協議棧實現了TCP協議的全部功能,包括連接建立、數據傳輸、流量控制、擁塞控制以及連接關閉等。本文將深入分析Linux內核中tcp_close…

java+postgresql+swagger-多表關聯insert操作(七)

入參為json&#xff0c;然后根據需要對多張表進行操作&#xff1a; 入參格式&#xff1a; [{"custstoreName":"swagger-測試經銷商01","customerName":"swagger-測試客戶01","propertyNo":"swaggertest01",&quo…

R語言——繪制生命曲線圖(細胞因子IL5)

繪制生命曲線圖&#xff08;根據細胞因子&#xff09; 說明流程代碼加載包讀取Excel文件清理數據重命名列名處理IL-5中的"<"符號 - 替換為檢測下限的一半首先找出所有包含"<"的值檢查缺失移除缺失值根據IL-5中位數將患者分為高低兩組 創建生存對象擬…

Python----計算機視覺處理(Opencv:道路檢測完整版:透視變換,提取車道線,車道線擬合,車道線顯示,)

Python----計算機視覺處理&#xff08;Opencv:道路檢測之道路透視變換) Python----計算機視覺處理&#xff08;Opencv:道路檢測之提取車道線&#xff09; Python----計算機視覺處理&#xff08;Opencv:道路檢測之車道線擬合&#xff09; Python----計算機視覺處理&#xff0…

【Oracle篇】跨字符集遷移:基于數據泵的ZHS16GBK轉AL32UTF8全流程遷移

&#x1f4ab;《博主主頁》&#xff1a;奈斯DB-CSDN博客 &#x1f525;《擅長領域》&#xff1a;擅長阿里云AnalyticDB for MySQL(分布式數據倉庫)、Oracle、MySQL、Linux、prometheus監控&#xff1b;并對SQLserver、NoSQL(MongoDB)有了解 &#x1f496;如果覺得文章對你有所幫…

【C++算法】50.分治_歸并_翻轉對

文章目錄 題目鏈接&#xff1a;題目描述&#xff1a;解法C 算法代碼&#xff1a;圖解 題目鏈接&#xff1a; 493. 翻轉對 題目描述&#xff1a; 解法 分治 策略一&#xff1a;計算當前元素cur1后面&#xff0c;有多少元素的兩倍比我cur1小&#xff08;降序&#xff09; 利用單…

深入講解:智能合約中的讀寫方法

前言 在探秘區塊鏈開發:智能合約在 DApp 中的地位及與傳統開發差異一文中我提到對于智能合約中所有的寫入其實都算是交易。而在一個完整的智能合約代碼中最大的兩個組成部分就是讀取和寫入。 本文將為你深入探討該兩者方法之間的區別。 寫方法 寫方法其實就是對區塊鏈這一…

Go語言類型捕獲及內存大小判斷

代碼如下&#xff1a; 類型捕獲可使用&#xff1a;reflect.TypeOf()&#xff0c;fmt.Printf在的%T。 內存大小判斷&#xff1a;len()&#xff0c;unsafe.Sizeof。 package mainimport ("fmt""unsafe""reflect" )func main(){var i , j 1, 2f…

MyBatis Plus 在 ZKmall開源商城持久層的優化實踐

ZKmall開源商城作為基于 Spring Cloud 的高性能電商平臺&#xff0c;其持久層通過 MyBatis Plus 實現了多項深度優化&#xff0c;涵蓋分庫分表、緩存策略、分頁性能、多租戶隔離等核心場景。以下是具體實踐總結&#xff1a; 一、分庫分表與插件集成優化 1. 分庫分表策略 ?Sh…

學習MySQL第七天

夕陽無限好 只是近黃昏 一、子查詢 1.1 定義 將一個查詢語句嵌套到另一個查詢語句內部的查詢 我們通過具體示例來進行演示&#xff0c;這一篇博客更側重于通過具體的小問題來引導大家獨立思考&#xff0c;然后熟悉子查詢相關的知識點 1.2 問題1 誰的工資比Tom高 方…

Nginx 常見面試題

一、nginx常見錯誤及處理方法 1.1 404 bad request 一般原因&#xff1a;請求的Header過大 解決辦法&#xff1a; 配置nginx.conf 相關設置1. client_header_buffer_size 16k; 2. large_client_header_buffers 4 64k;1.2 413 Request Entity Too Large 一般原因&#xff1…

LeetCode 每日一題 2025/3/31-2025/4/6

記錄了初步解題思路 以及本地實現代碼&#xff1b;并不一定為最優 也希望大家能一起探討 一起進步 目錄 3/31 2278. 字母在字符串中的百分比4/1 2140. 解決智力問題4/2 2873. 有序三元組中的最大值 I4/3 2874. 有序三元組中的最大值 II4/4 1123. 最深葉節點的最近公共祖先4/5 1…