应用程序内部和外部IIS反向代理的CORS头?
我的NodeJS/Express应用程序以前仅在IIS反向代理后提供,并在专用端口上侦听,但现在被配置为在服务器的端口443上侦听 该框有几个DNS别名,其中一个别名(由F5负载平衡器)指向IIS端口,因此它会命中反向代理。我将代理重写规则配置为指向端口443应用程序内部和外部IIS反向代理的CORS头?,iis,cors,reverse-proxy,Iis,Cors,Reverse Proxy,我的NodeJS/Express应用程序以前仅在IIS反向代理后提供,并在专用端口上侦听,但现在被配置为在服务器的端口443上侦听 该框有几个DNS别名,其中一个别名(由F5负载平衡器)指向IIS端口,因此它会命中反向代理。我将代理重写规则配置为指向端口443 hostname.com --> app:443 special.com --> IIS:9303 --> app:443 该应用程序提供如下CORS标题: res.set('Access-Control-Allow-
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,并在outbound部分中加入“overwrite”规则,那么在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,POST,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访问特殊
站点时,我会收到各种各样的CORS错误,使应用程序无法工作。为了使应用程序通过IE通过反向代理工作,我似乎必须将
包含到IIS自定义标题
部分(除了添加的标题和方法之外)。当然,这也会破坏应用程序,因此我必须从应用程序内部删除相同的标题。现在,应用程序无法在反向代理之外工作
有没有一种已知的方法可以允许应用程序显示CORS头,让IIS反向代理只需来回传递对它们的请求?有没有办法捕获飞行前的并将正确的东西发送给IE?为什么选项请求没有命中出站规则
一句话:我怎样才能让我的应用程序在代理内外都能被访问,并在它访问代理时让IE高兴?您可以尝试将“跨域访问数据源”的设置更改为启用
在Internet Explorer中,单击工具>Internet选项以打开
Internet选项窗口
在安全选项卡上,单击本地intranet区域,然后单击
打开安全设置的自定义级别-本地Intranet区域
窗户
在“杂项”设置下,跨域访问数据源,
单击启用
这可能是由IE版本引起的,请检查您的IE版本,并将其升级至最新版本。它是IE11,我无法控制公司应用程序认证过程。我的问题更多的是如何允许IIS反向代理访问面向客户端的应用程序,因为一个CORS标头拒绝多个值,并且飞行前/选项不符合出站规则请求:-\你的应用程序是否在chrome中工作,但当你通过IE访问网站时,你会收到CORS错误?是的,但解决方案是让IIS一致地发送飞行前和内容请求的标题。