如何解决IIS反向代理内部和外部的应用程序的CORS标头?
我的NodeJS / Express应用程序以前仅在IIS反向代理后面提供服务,并在专用端口上进行侦听,但现在已配置为在服务器的端口443上进行侦听。
此框有多个DNS别名,其中一个别名(由F5负载平衡器定向)在IIS端口上,因此它命中了反向代理。我将代理重写规则配置为直接定向到端口443。
hostname.com --> app:443
special.com --> IIS:9303 --> app:443
该应用提供了CORS标头,如下所示:
res.set('Access-Control-Allow-Origin','*');
res.set('Access-Control-Allow-Methods','GET,POST,PUT');
res.set('Access-Control-Allow-Headers','content-type');
res.set('Access-Control-Allow-Credentials',true);
如果我从反向代理的customHeaders
部分中删除了Access-Control-Allow-Origin,并在出站部分中放置了“覆盖”规则,则这在反向代理的内部和外部都适用-在Chrome中
web.config
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Headers" value="Authorization,Content-Type,Cache-Control,Pragma" />
<add name="Access-Control-Allow-Methods" value="GET,PUT,OPTIONS,HEAD,UPGRADE" />
</customHeaders>
</httpProtocol>
<rewrite>
<rules>
<rule name="special" stopProcessing="true">
<match url="(.*)" negate="false" />
<conditions logicalGrouping="MatchAny">
<add input="{HTTP_HOST}" pattern="special.com" />
</conditions>
<action type="Rewrite" url="https://localhost:443/{R:1}" logRewrittenUrl="true" />
</rule>
</rules>
<outboundRules>
<rule name="Set-Access-Control-Allow-Origin" stopProcessing="false">
<match serverVariable="RESPONSE_Access-Control-Allow-Origin" pattern=".*" negate="false" />
<action type="Rewrite" value="*" replace="true" />
</rule>
</outboundRules>
</rewrite>
</system.webServer>
</configuration>
现在,这就是问题所在。通过IE访问special
网站时,出现各种CORS错误,导致该应用无法正常运行。为了使应用程序通过IE通过反向代理工作,我似乎必须将<add name="Access-Control-Allow-Origin" value="*" />
包括到IIS customHeaders
部分中(除了添加的标题和方法之外) )。当然,这也会破坏应用程序,因此我必须从应用程序内部删除相同的标头。现在,该应用程序无法在反向代理之外运行!
是否存在已知的方法来允许应用程序呈现CORS标头,并且允许IIS反向代理仅将对它们的请求前后传递?有没有办法捕获preflight
并将正确的消息发送到IE?为什么没有为OPTIONS请求命中出站规则?
底线:如何让我的应用在代理内部和外部都可以访问,并在IE到达代理时使IE开心?
解决方法
您可以尝试将“跨域访问数据源”的设置更改为“已启用”。
- 在Internet Explorer中,单击“工具”>“ Internet选项”以打开 Internet选项窗口。
- 在“安全性”选项卡上,单击“本地Intranet”区域,然后单击“ 自定义级别以打开“安全设置”-本地Intranet区域 窗口。
- 在“其他”设置下,跨域访问数据源, 点击启用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。