我在 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 捕获的图片。我设法看到了管理员登录页面,但只要我提交密码,它就会给我错误。
答案1
我有同样的问题。我能说的是,Access-Control-Allow-Origin: * 在登录期间不起作用。(当传输凭据时)我尝试将其更改为我的实际 URL 和端口,但这也不起作用。
有任何最新消息吗?
编辑:现在讨论这里: https://gitlab.com/foundrynet/foundryvtt/-/issues/5263
IIS 的缩写:system.webServer.proxy:preserveHostHeaders true 警告:必须在服务器级别设置,因此它可能会影响同一服务器上的其他应用程序
Foundry 可能会改变/改进某些内容。仍在讨论中。