IIS 反向代理 CORS 問題背後的 FoundryVTT 伺服器
我在 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 的圖片。我設法看到一個管理員登錄頁面,但是一旦我送出密碼,它就會給我錯誤。
我也有同樣的問題。我可以說的一件事是, Access-Control-Allow-Origin: * 在登錄期間將不起作用。(傳輸憑據時)我嘗試將其更改為我的實際 url 和埠,但這也不起作用。
對此有何更新?
編輯:討論現在在這裡: https ://gitlab.com/foundrynet/foundryvtt/-/issues/5263
IIS 的縮寫:system.webServer.proxy:preserveHostHeaders true 警告:這必須在伺服器級別設置,因此它可能會影響同一伺服器上的其他應用程序
Foundry 可能會改變/改進一些東西。仍在討論中。