ブラウザは適切な設定 (`X-Frame-Options: SAMEORIGIN`) にもかかわらず、Discourseのiframe内でのレンダリングを防ぎます

皆さん、こんにちは。

アプリケーション内のiframeにDiscourseインスタンスを埋め込んでおり、そのように動作しています。しかし、認証されていないユーザーがアクセス権のないページ(存在しないか、グループ制限されている)にアクセスしようとすると、応答にX-Frame-Options: SAMEORIGINが奇妙に含まれ、ブラウザはフレームのレンダリングをブロックします。

3.3.1安定版からほぼ最新の最先端(最後にテストしたのは先週半ば)までのさまざまなバージョンで確認しました。

これは親アプリとは異なるサブドメインで実行されており、allow_embedding_site_in_an_iframe: trueで埋め込み用に設定されています。クリーンなインスタンスをデバッグしたところ、このような場合、ApplicationControllerconditionally_allow_site_embeddingメソッドが呼び出されず、ヘッダーが応答に残ってしまうことに気づきました(GHリンク)。そして、どこかで例外が発生してフローが中断していることを追跡しました。

再現手順:

  1. Discourseのクリーンインスタンス(または実際には任意のインスタンス)を実行し、allow_embedding_site_in_an_iframe: trueで設定します。
  2. HTTPSで提供されるウェブサイトのiframeに埋め込み、存在しないパスを使用して404エラーをトリガーします。

期待される動作: ブラウザはDiscourseのレンダリングを許可します。
実際の動作: ブラウザは、応答に含まれるX-Frame-Options: SAMEORIGINにより、Discourseのレンダリングを防止します。

補足:DNSのみのCloudflareを経由して実行しており、プロキシモードでヘッダーを削除しようとしましたが、カスタムSSO実装に必要なCookieをCFがフィルタリングするため、プロキシモードにすることはできません。そのため、現時点では選択肢がありません。