安卓设备无法使用 RTE,苹果设备无法切换编辑器模式

我认为最近 Discourse 的更新不太可能导致这个问题。不过,S3 在 CORS 方面一直存在一个奇怪的行为,这可能导致 CDN 缓存了一个没有 Access-Control-Allow-Origin 头的资源版本。如果确实是缓存问题,这或许能解释为什么只有部分用户受到影响(很可能与他们的地理位置有关)。

据我所知,S3 只会向发送了 Origin 头的请求(即来自普通 Web 浏览器的请求)返回 Access-Control-Allow-Origin 头。当省略 Access-Control-Allow-Origin 时,S3 不会在响应中提供 Vary: origin。因此:如果对某个资源的首次请求来自非 Web 浏览器环境(例如 curl 或某些网络爬虫),CDN 就可能缓存那个没有 CORS 头的版本。这非常令人烦恼!

这里的 DISCOURSE_CORS 设置完全帮不上忙。该设置仅与应用服务器相关,与 S3 无关。

在我们的托管环境中,我们通过配置 Cloudfront 在所有响应中添加 Access-Control-Allow-Origin: * 来规避这个问题。这样可以确保 S3 的这种奇怪行为不会导致缓存了错误的结果。

或者,你可以配置 Cloudfront 将 Origin 请求头包含在其缓存键中,这样就能将非 CORS 响应与 CORS 响应区分开来。

亚马逊在 这里 提供了大量关于 CORS 的文档。我的笔记里还有 这个链接,它显然是一个专门讨论此问题的论坛帖子……但看起来它已经被删除了 :cry: