You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何更新IIS重写规则以解决CORS及Referrer Policy限制下的JavaScript请求问题

解决IIS重写规则下Referrer Policy导致的JS请求失败问题

嘿,我帮你梳理下当前配置的问题,然后给出调整方案:

首先你当前的入站重写规则匹配的是^api/(.*),但你的实际请求路径是/back/api/...——这就导致规则根本不会触发,这是第一个要修正的点。

再来说Referrer Policy: strict-origin-when-cross-origin的问题:这个策略会在跨域请求时只发送源地址(而非完整的Referrer路径),如果目标站点remotesite对Referrer有严格要求,或者浏览器因为这个策略限制了请求发起,就会导致JS请求失败。我们需要调整响应头的Referrer Policy,同时完善CORS配置。

以下是更新后的完整配置:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<!-- 修正匹配规则,精准对应/back/api/开头的请求 -->
<rule name="ForwardBackApi" stopProcessing="true">
<match url="^back/api/(.*)" />
<action type="Rewrite" url="https://remotesite/back/api/{R:1}" />
<!-- 可选:如果需要把前端的原始Referrer传递给目标站点,保留这个配置 -->
<serverVariables>
<set name="HTTP_REFERER" value="{HTTP_REFERER}" />
</serverVariables>
</rule>
</rules>
<outboundRules>
<clear />
<!-- 保留原有的CORS Origin规则,确保跨域请求的Origin被正确允许 -->
<rule name="SetCorsOrigin" priority="1">
<match serverVariable="RESPONSE_Access_Control_Allow_Origin" pattern=".*" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="true">
<add input="{HTTP_ORIGIN}" pattern="(.*)" />
</conditions>
<action type="Rewrite" value="{C:0}" />
</rule>
<!-- 添加规则:修改响应的Referrer Policy,放宽跨域请求的限制 -->
<rule name="AdjustReferrerPolicy" priority="2">
<match serverVariable="RESPONSE_Referrer_Policy" pattern=".*" />
<action type="Rewrite" value="no-referrer-when-downgrade" />
</rule>
<!-- 可选:如果目标站点要求Referrer必须是你的域名,启用这个规则 -->
<!--
<rule name="RewriteRefererHeader" preCondition="IsBackApiRequest">
<match serverVariable="HTTP_REFERER" pattern=".*" />
<action type="Rewrite" value="https://mysite/" />
</rule>
<preConditions>
<preCondition name="IsBackApiRequest">
<add input="{REQUEST_URI}" pattern="^back/api/.*" />
</preCondition>
</preConditions>
-->
</outboundRules>
</rewrite>
<!-- 补充CORS常用响应头,确保预检请求能正常通过 -->
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
<add name="Access-Control-Allow-Headers" value="Content-Type, Authorization" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>

关键修改说明:

  • 修正入站匹配规则:把原规则的匹配路径改成^back/api/(.*),这样才能正确捕获/back/api/...开头的请求,stopProcessing="true"是为了避免后续规则干扰。
  • 调整Referrer Policy:新增的AdjustReferrerPolicy规则会把响应头里的Referrer-Policy重写为no-referrer-when-downgrade——这个策略允许在跨域请求时发送完整的Referrer信息(只要不从HTTPS降到HTTP),刚好解决strict-origin-when-cross-origin带来的限制。如果你需要更宽松的设置,也可以换成origin(只发源地址)或者unsafe-url(发完整URL,注意安全风险)。
  • 完善CORS配置:在httpProtocol下添加了常用的跨域响应头,确保浏览器的OPTIONS预检请求能正常通过,避免跨域请求被拦截。
  • 可选的Referrer头修改:如果目标站点remotesite要求请求的Referrer必须是你的域名,可以启用注释里的规则,把转发请求的Referrer设置为你的站点地址。

额外提醒:

  • 确保你的IIS已经装了URL Rewrite和**ARR(Application Request Routing)**模块,不然重写和反向代理功能用不了。
  • 改完配置后,记得重启IIS站点生效。如果还是有问题,打开浏览器开发者工具的Network面板,看看请求的Referrer头和响应的Referrer-Policy头是不是符合预期。

内容的提问来源于stack exchange,提问作者barteloma

火山引擎 最新活动