服務器都是用的iis, 前端部署后報跨域,不是用同一個服務器 是前端項目的服務器做Nginx轉發,還是后端項目的服務器做Nginx轉發?

當服務器環境為 IIS(而非 Nginx),且前端、后端部署在不同服務器導致跨域時,核心思路與 Nginx 場景一致,但實現工具從「Nginx」替換為「IIS 配置」。此時依然存在 “后端服務器配置跨域頭”“前端服務器配置反向代理” 兩種方案,無需額外引入 Nginx(除非你主動選擇在 IIS 前端疊加 Nginx)。

一、核心方案對比(IIS 環境)

方案實現方式適用場景推薦優先級
后端 IIS 配置跨域頭在后端服務器的 IIS 中,通過「HTTP 響應頭」或「URL 重寫模塊」添加 Access-Control-* 頭,允許前端域名請求1. 有權限修改后端 IIS 配置
2. 多個前端項目共用同一后端
3. 希望減少轉發損耗(前端直接請求后端)
★★★★★
前端 IIS 配置反向代理在前端服務器的 IIS 中,通過「URL 重寫模塊」配置代理,將前端請求轉發到后端(前端請求同源地址,規避跨域)1. 無權修改后端配置(如第三方接口)
2. 需隱藏后端真實地址(安全需求)
3. 后端不支持直接配置跨域頭
★★★☆☆

二、詳細實現步驟(IIS 環境)

方案1:后端 IIS 直接配置跨域頭(推薦)

原理:通過后端 IIS 向前端返回「允許跨域」的響應頭(如 Access-Control-Allow-Origin),瀏覽器識別后允許跨域請求,無需轉發。
前提:后端 IIS 需安裝「URL 重寫模塊」(處理預檢請求 OPTIONS,可選但建議安裝,IIS 管理器可直接搜索安裝)。

步驟1:添加跨域響應頭(基礎配置)
  1. 打開「后端服務器 IIS 管理器」→ 選中后端站點(如 BackendSite)→ 雙擊「HTTP 響應頭」;
  2. 點擊右側「添加」,依次添加以下頭(根據需求調整):
    響應頭名稱值(示例)說明
    Access-Control-Allow-Originhttp://frontend-server.com(前端服務器域名)允許的前端域名,不能用 *(否則無法攜帶 Cookie)
    Access-Control-Allow-MethodsGET,POST,PUT,DELETE,OPTIONS允許的請求方法
    Access-Control-Allow-HeadersContent-Type,Authorization允許的請求頭(如 Token、Content-Type)
    Access-Control-Allow-Credentialstrue允許跨域攜帶 Cookie(如需)
    Access-Control-Max-Age3600預檢請求緩存時間(減少 OPTIONS 請求次數)
步驟2:處理預檢請求(OPTIONS 請求)

跨域請求前,瀏覽器會先發 OPTIONS 預檢請求驗證權限,需后端 IIS 正確響應(否則請求失敗):

  1. 選中后端站點 → 雙擊「URL 重寫」→ 點擊右側「添加規則」→ 選擇「空白規則」;
  2. 配置規則:
    • 匹配 URL:模式 .*(匹配所有路徑),使用「正則表達式」;
    • 條件:添加條件 → 條件輸入 {REQUEST_METHOD},模式 ^OPTIONS$(僅匹配 OPTIONS 請求);
    • 操作:操作類型選擇「自定義響應」,狀態代碼 204(無內容,成功響應),狀態文本 No Content
  3. 保存規則,重啟站點。

優勢:無轉發損耗,前端直接請求后端(如 http://backend-server.com/api/user),性能最優,配置一次生效。

方案2:前端 IIS 配置反向代理(后端不可控時用)

原理:前端代碼請求「與自身同源的地址」(如 http://frontend-server.com/api/user),由前端 IIS 將該請求「轉發」到后端服務器(如 http://backend-server.com/api/user)。瀏覽器認為是同源請求,規避跨域。
前提:前端 IIS 需安裝「URL 重寫模塊」和「應用請求路由(ARR)」(ARR 是 IIS 實現反向代理的核心模塊,可通過 IIS 管理器或微軟官網下載)。

步驟1:啟用 ARR 代理
  1. 打開「前端服務器 IIS 管理器」→ 點擊左側服務器名稱(如 WIN-XXXX)→ 雙擊「應用請求路由緩存」;
  2. 點擊右側「服務器代理設置」→ 勾選「啟用代理」→ 保存(若提示“需要 URL 重寫模塊”,先安裝該模塊)。
步驟2:配置 URL 重寫規則(轉發請求)
  1. 選中前端站點(如 FrontendSite,需先部署前端打包文件,如 dist 目錄)→ 雙擊「URL 重寫」→ 「添加規則」→「空白規則」;
  2. 配置規則(以轉發 /api/ 路徑為例):
    • 匹配 URL
      模式 ^api/(.*)(匹配所有以 /api/ 開頭的路徑,如 /api/user),使用「正則表達式」;
    • 條件(可選):無需額外條件;
    • 操作
      操作類型選擇「重寫」,重寫 URL 填寫 http://backend-server.com/api/{R:1}{R:1} 是正則捕獲的路徑,如 /user);
      勾選「停止處理后續規則」(避免其他規則干擾);
  3. 保存規則,重啟前端站點。
步驟3:調整前端代碼

前端請求地址從「后端域名」改為「前端同源路徑」:

// 原跨域請求(錯誤)
axios.get('http://backend-server.com/api/user')// 調整后(通過前端 IIS 轉發)
axios.get('/api/user') // 實際請求 http://frontend-server.com/api/user,由 IIS 轉發到后端

優勢:無需修改后端配置,適合后端不可控場景(如調用第三方接口),且能隱藏后端真實地址。

三、總結

  1. 優先選方案1:若能修改后端 IIS 配置,直接添加跨域頭是最直接、高效的方式,無轉發損耗;
  2. 備選方案2:若后端不可控(如第三方接口),再用前端 IIS 配置反向代理,需注意調整前端請求路徑。

兩種方案均基于 IIS 原生功能實現,無需額外引入 Nginx(除非你有特殊需求,如在 IIS 前端疊加 Nginx 做負載均衡,但此時配置邏輯與前文 Nginx 方案一致)。

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

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

相關文章

【大前端】前端生成二維碼

前端生成二維碼有很多方法,常見的做法是使用 JavaScript 庫 來生成二維碼。下面整理幾種常用方案,并附示例代碼。1?? 使用 qrcode 庫(推薦)qrcode 是一個非常流行的前端 JS 庫,可以生成 Canvas 或者 SVG 的二維碼。安…

LeetCode 刷題【71. 簡化路徑】

71. 簡化路徑 自己做 解&#xff1a;遍歷檢查 class Solution { public:string simplifyPath(string path) {int p 0;string res;while(p < (int)path.size()){//情況1&#xff1a;遇到"/./" 》p跳過"/."if(p < (int)path.size() - 2 && p…

《算法闖關指南:優選算法-雙指針》--01移動零,02復寫零

&#x1f525;個人主頁&#xff1a;草莓熊Lotso &#x1f3ac;作者簡介&#xff1a;C研發方向學習者 &#x1f4d6;個人專欄&#xff1a;《C知識分享》《Linux 入門到實踐&#xff1a;零基礎也能懂》《數據結構與算法》《測試開發實戰指南》《算法題闖關指南》 ??人生格言&am…

【小白筆記】命令不對系統:無法將‘head’項識別為 cmdlet、函數、腳本文件或可運行程序的名稱

head : 無法將“head”項識別為 cmdlet、函數、腳本文件或可運行程序的名稱。請檢查名稱的拼寫&#xff0c;如果包括路徑&#xff0c;請確保路徑正確&#xff0c;然后再試一次。所在位置 行:1 字符: 1 head -5 train_data.csv ~~~~ CategoryInfo : ObjectNotFound: (h…

宋紅康 JVM 筆記 Day15|垃圾回收相關算法

一、今日視頻區間 P138-P153 二、一句話總結 標記階段&#xff1a;引用計數算法&#xff1b;標記階段&#xff1a;可達性分析算法&#xff1b;對象的finalization機制&#xff1b;MAT與JProfiler的GC Roots溯源&#xff1b;清除階段&#xff1a;標記-清除算法&#xff1b;清除階…

Go基礎(③Cobra)

Cobra 是幫你快速開發命令行工具的框架 假設你想做一個叫 todo 的命令行工具&#xff0c;實現這些功能&#xff1a; todo add "買牛奶" → 添加待辦 todo list → 查看所有待辦 todo done 1 → 標記第 1 個待辦為已完成 沒有 Cobra 的話&#xff0c;你需要自己寫代…

從 scheduler_tick 到上下文切換:深入解析 Linux 內核的 TIF_NEED_RESCHED 標志設置流程

Linux 是如何決定何時進行上下文切換的&#xff1f; 在Linux中&#xff0c;CPU 上下文切換是指當操作系統將 CPU 從一個進程切換到另一個進程時&#xff0c;保存當前進程的執行狀態&#xff0c;并加載新進程的執行狀態的過程就稱為上下文切換。 但在 Linux 內核中&#xff0c…

Redis 深度解析:數據結構、持久化與集群

Redis (Remote Dictionary Server) 是一種高性能的鍵值&#xff08;Key-Value&#xff09;內存數據庫&#xff0c;以其豐富的數據結構、極低的延遲、出色的穩定性和強大的集群能力&#xff0c;在現代應用程序的開發中扮演著至關重要的角色。無論是作為緩存、消息隊列、會話存儲…

HTTPS優化簡單總結

性能損耗選擇橢圓曲線&#xff0c;并生成橢圓曲線的計算耗時CA證書驗證的耗時計算pre-master的耗時硬件優化HTTPS是計算密集型任務&#xff0c;不是IO密集型任務所以硬件最好買更高級的CPU&#xff0c;而不是網卡&#xff0c;磁盤協議優化ECDHE代替RSA&#xff0c;因為ECDHE可以…

從IFA再出發:中國制造與海信三筒洗衣機的“答案”

當全球消費電子行業的目光再次聚焦柏林&#xff0c;柏林國際電子消費品展覽會(IFA2025)不僅成為創新產品的秀場&#xff0c;更悄然變身為中國企業講述全球化進階故事的重要舞臺。近日&#xff0c;海信旗下三筒洗衣機——棉花糖Ultra全家筒迎來它的國際首秀&#xff0c;首次海外…

c++工程如何提供http服務接口

在 C 工程里給類似 /index/api/ 的服務&#xff0c;基本步驟如下&#xff1a; 選一個HTTP服務框架&#xff1b;起一條監聽線程&#xff08;或線程池&#xff09;&#xff1b;把路徑-處理函數注冊進去&#xff1b; 下面是 2 種簡單的方案。方案 A&#xff1a;Crow&#xff08;He…

cfshow-web入門-php特性

web89 <?php ? include("flag.php"); highlight_file(__FILE__); ? if(isset($_GET[num])){$num $_GET[num];if(preg_match("/[0-9]/", $num)){die("no no no!");}if(intval($num)){echo $flag;} } 正則匹配檢查不能是數字&#xff0c;但…

ctfshow - web - 命令執行漏洞總結(二)

web73該題目沒有開啟web72的open_basedir&#xff0c;所以可以使用var_export(scandir(/));exit();進行目錄掃描。讀取文件函數&#xff1a;require_once()web74scandir()函數被禁用&#xff0c;使用glob://偽協議進行讀取根目錄文件。cvar_export(glob(../../../*));exit(); c…

如何將視頻從安卓手機傳輸到電腦?

無論你是否是視頻愛好者&#xff0c;你可能都希望知道如何將視頻從安卓手機傳輸到電腦&#xff0c;以釋放存儲空間并防止性能問題。這也有助于同步視頻或防止意外刪除。在本文中&#xff0c;我們將探索七種高效的傳輸方法。方法 1&#xff1a;僅通過 USB 將手機視頻發送到電腦許…

Pico 4 Enterprise(企業版)與Unity的交互-有線串流調試篇

入手了Pico 4 E做VR開發&#xff0c;誰知入了天坑...根據官方文檔&#xff0c;嘗試了串流助手、企業串流、PICO Developer Center&#xff0c;陷入了各種版本問題、環境問題的陷阱。而且Pico4E的OS自24年12開始就不再更新&#xff0c;頭盔中預裝的企業串流版本也較低&#xff0…

redis里多線程的應用具體在哪些場景

Redis 6.0 引入的多線程I/O&#xff0c;?特指用于處理網絡數據的讀取&#xff08;read&#xff09;和寫入&#xff08;write&#xff09;/解析&#xff08;parse&#xff09;的并行化&#xff0c;而絕非將命令的執行&#xff08;真正的數據操作&#xff09;變成多線程。這是一…

DI-GAN:基于深度學習的動態形變多模光纖透反射光控制

DI-GAN:基于深度學習的動態形變多模光纖透反射光控制 1 論文核心概念 本文提出了一種名為 DI-GAN(Deep Imaging Generative Adversarial Network) 的持續深度學習框架,用于動態形變多模光纖(MMF) 的光場控制。該框架能夠同時利用透射和反射信息,實現對光纖末端光場的實…

【深度學習新浪潮】具身智能中使用到的世界模型是什么?

在具身智能中,世界模型(World Model) 是智能體對物理環境的內在“認知地圖”,它通過學習環境的動態規律(如物體運動、物理交互、因果關系等),實現對未來狀態的預測、對過去狀態的反推,以及對未觀測狀態的補全。其核心價值在于:讓智能體無需頻繁與真實環境交互,就能在…

Qt_UI界面的設計

一、設置UI窗口大小二、接收框只讀三、下拉選項雙擊添加選項1是添加&#xff0c;2是調整順序四、標簽字體居中字體大小五、發送框六、按鈕七、透明框&#xff08;可以放標簽或圖片啥的&#xff09;設置最小寬度八、水平布局九、垂直布局十、彈簧&#xff08;方便給水平垂直布局…

FTP文件傳輸服務

一、FTP協議、服務器FTP&#xff1a;文件傳輸協議&#xff08;用于網絡文件雙向傳輸的應用層協議&#xff09;特點&#xff1a;最廣泛、最底層、較簡單&#xff0c;但是明文傳輸&#xff1b;適用于較大文件的傳輸1.常見客戶端、服務器客戶端&#xff1a;WINSCP or filezilla&am…