AndroidではRTEが使えず、iOSデバイスではエディタのモードを変更できない

最近のDiscourseの変更がこの問題の原因になったとは考えにくい。ただし、S3にはCORSに関する長年の厄介な挙動があり、Access-Control-Allow-Origin ヘッダーが付いていないアセットのバージョンがCDNにキャッシュされる原因となることがある。もしこれがキャッシュの問題であれば、一部のユーザー(おそらく場所による)にのみ影響を与える理由を説明できるだろう。

記憶が正しければ、S3はOriginヘッダー(つまり通常のWebブラウザからのリクエスト)を送信するリクエストに対してのみAccess-Control-Allow-Originヘッダーを返す。Access-Control-Allow-Originが省略された場合、レスポンスにVary: originを含めない。つまり:特定のアセットへの最初のリクエストがWebブラウザ以外のコンテキスト(例:curlやWebクローラーなど)から送信された場合、CDNはCORSヘッダーなしのバージョンをキャッシュしてしまう可能性がある。非常に厄介だ!

DISCOURSE_CORS設定はここでは全く役に立たない。それはアプリケーションサーバーに関連するだけで、S3には関係ない。

当社のホスティングでは、Cloudfrontを設定してすべてのレスポンスにAccess-Control-Allow-Origin: *を追加することで、この問題を回避している。これにより、S3の奇妙な挙動によって悪い結果がキャッシュされるのを防げる。

あるいは、Cloudfrontを設定してOriginリクエストヘッダーをキャッシュキーに含めることもできる。そうすれば、CORSレスポンスとCORSなしのレスポンスを別々に保持できる。

AmazonはCORSに関するドキュメントをこちらに多数掲載している。メモにこのリンクを入れていたが、これはまさにこの問題に関するフォーラムスレッドだったようだ…が、削除されてしまったらしい :cry: