IIS 反向代理 CORS 问题背后的 FoundryVTT 服务器

IIS 反向代理 CORS 问题背后的 FoundryVTT 服务器

我在 FreeNAS jail 中有一个 FoundryVTT 服务器。我主要遵循这些说明让它工作。我有一个以前的问题,我已解决此问题,现在它适用于 <= v0.7.9。但是,>= v0.8 不再起作用,当我通过 WAN 访问服务器时,我不断遇到与 CORS 相关的问题。我在日志和网页控制台(或通过 Fiddler)中唯一能看到的是 403 和正文:

{“error”:“不允许跨源请求”}

错误页面图像

我已经联系了 FoundryVTT Discord,他们基本上说不应该更改任何与 CORS 相关的内容,并且我应该使用 IIS 管理器(v10.0.19041.1)以外的其他管理器。

我已尝试过:

  • 已验证这是新版本的实际问题。按照相同步骤创建了一个新的 0.7.9. 实例,它运行良好。

  • 添加自定义标题,如下所示:

    <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Headers" value="Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers" />
        <add name="Access-Control-Allow-Methods" value="GET,HEAD,OPTIONS,POST,PUT" />
        <add name="Access-Control-Allow-Credentials" value="false" />
      </customHeaders>
    </httpProtocol>
    

    以及它们的各种组合(例如指定www.myhost.com并允许凭证为真,* 允许标题/方法)

  • 已应用出站重写规则:

    <rule name="Test1">
      <match serverVariable="RESPONSE_Access_Control_Allow_Origin" pattern=".*" />
      <action type="Rewrite" value="*" />
    </rule>
    <rule name="Test2">
      <match serverVariable="RESPONSE_Access_Control_Allow_Headers" pattern=".*" />
      <action type="Rewrite" value="*" />
    </rule>
    <rule name="Test3">
      <match serverVariable="RESPONSE_Access_Control_Allow_Methods" pattern=".*" />
      <action type="Rewrite" value="GET,HEAD,OPTIONS,POST,PUT,DELETE" />
    </rule>
    <rule name="Test4">
      <match serverVariable="RESPONSE_Access_Control_Allow_Credentials" pattern=".*" />
      <action type="Rewrite" value="false" />
    </rule>
    

    还尝试了各种组合,如之前所写。

  • 安装了CORS 模块并尝试了各种各样的方法,比如:

    <cors enabled="true" failUnlistedOrigins="false">
     <add origin="*" >
      <allowHeaders allowAllRequestedHeaders="true" />
      <allowMethods>
          <add method="GET" />
          <add method="POST" />
          <add method="PUT" />
          <add method="HEAD" />
          <add method="OPTIONS" />
          <add method="DELETE" />
      </allowMethods>
    </add>
    <add origin="https://www.myhost.com" allowCredentials="true" maxAge="120" >
      <allowHeaders allowAllRequestedHeaders="true" />
      <allowMethods>
          <add method="GET" />
          <add method="POST" />
          <add method="PUT" />
          <add method="HEAD" />
          <add method="OPTIONS" />
          <add method="DELETE" />
      </allowMethods>
     </add>
    </cors>
    

    在检查我的 IIS 中的应用程序是在 x86 还是 x64 模式下运行(它在 x64 模式下运行)后,还特意尝试安装 x64 版本的 CORS 模块。

  • 重启了一切。

似乎没有什么对我收到的错误有任何影响。使用 fiddler 时,我可以看到如果我添加/更改标头,响应就会发生变化。下面是我在 IIS 中未应用任何 CORS 规则时 Fiddler 捕获的图片。我设法看到了管理员登录页面,但只要我提交密码,它就会给我错误。

Fiddler 捕获

答案1

我有同样的问题。我能说的是,Access-Control-Allow-Origin: * 在登录期间不起作用。(当传输凭据时)我尝试将其更改为我的实际 URL 和端口,但这也不起作用。

有任何最新消息吗?

编辑:现在讨论这里: https://gitlab.com/foundrynet/foundryvtt/-/issues/5263

IIS 的缩写:system.webServer.proxy:preserveHostHeaders true 警告:必须在服务器级别设置,因此它可能会影响同一服务器上的其他应用程序

Foundry 可能会改变/改进某些内容。仍在讨论中。

相关内容