我在 FreeNAS 监狱中有一个 FoundryVTT 服务器。我主要是按照这些说明来让它工作的。我有一个以前的问题,我解决了,现在对于 <= v0.7.9 可以正常工作。但是,>= v0.8 不再有效,当我通过 WAN 访问服务器时,我不断遇到与 CORS 相关的问题。我在日志记录和网页控制台(或通过提琴手)中唯一能看到的是 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 模式下运行)之后,还特别尝试安装 CORS 模块的 x64 版本。
重新启动一切。
似乎对我遇到的错误没有任何影响。在使用提琴手时,我可以看到如果我添加/更改标题,响应正在发生变化。下面是我在 IIS 中未应用任何 CORS 规则时捕获的 Fiddler 的图片。我设法看到一个管理员登录页面,但是一旦我提交密码,它就会给我错误。