应用程序内部和外部IIS反向代理的CORS头?

应用程序内部和外部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-

我的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,并在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一致地发送飞行前和内容请求的标题。