服务器都是用的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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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…