尽管设置了 DISCOURSE_ENABLE_CORS: true,但没有出现 'Access-Control-Allow-Origin' 标头

我在我们的 app.yml 中添加了以下语句:

  DISCOURSE_ENABLE_CORS: true
  DISCOURSE_CORS_ORIGIN: '*'

为了在测试期间排除变量,暂时将 ‘*’ 设置为通配符。我也曾尝试显式设置 URL,但未能奏效。

然而,尽管采取了上述措施,我们仍然遇到以下问题:

Blockquote

请求的资源上不存在 ‘Access-Control-Allow-Origin’ 响应头。

上下文:我们有一个基于 Unity 的 iOS 客户端,它与某些 Discourse API 进行交互,测试时使用 WebGL。我们在浏览器中运行 WebGL 进行测试时遇到了此问题。

我还观察到,通过 Postman 测试发现,所有响应头中都包含 ‘strict-origin-when-cross-origin’ 的 Referrer-Policy。

任何帮助都将不胜感激。谢谢!

1 个赞

cors origins 设置在 admin > settings > security 中控制

您只需在 app.yml 中包含 DISCOURSE_ENABLE_CORS:

1 个赞

我也尝试并测试了这一点

对于我们的单站点设置,在 .yml 中设置 origin 与在管理界面中设置应产生相同的效果,详见:What is the purpose of Settings -> Security -> CORS origins vs similar environment setting?

1 个赞

我不确定我们是否支持这里的通配符。您能尝试使用真实域名吗?我们在几个配置了域名的网站上使用了 CORS 设置,看起来运行正常。

1 个赞

我还在其中一个网站上设置了它,并且它确实有效。

1 个赞

我尝试过使用域名,但没有成功。有没有办法确认环境变量是否正确设置?(或者确认应用重启已正确配置 CORS 而无需重新发送请求,我只是在思考一些调试方法。)

我认为这是处理 CORS 设置的相关代码部分,以防有用。

1 个赞

在 Nginx 访问日志中,我注意到 OPTIONS 请求返回了 404 错误(并且发生在 GET 请求错误之前)。

1 个赞