2016-11-10 24 views
6

iframe用のコンテンツをレンダリングする必要があるアクションから、X-Frame-Options: SAMEORIGINヘッダーを削除する必要があります。デフォルトでリクエストに追加されている限り、Startup.csservices.AddAntiforgery(o => o.SuppressXFrameOptionsHeader = false);で無効にしました。結果フィルタ属性で装飾され、クロスドメインの要求に答えるために必要なASP.Net Core:X-Frame-Options strange behavior

app.Use(async (context, next) => 
    { 
     context.Response.Headers.Add("X-Frame-Options", "SAMEORIGIN"); 

     await next(); 
    }); 

アクション:

public class SuppresXFrameOptionFilter : ResultFilterAttribute 
    { 
     public override async Task OnResultExecutionAsync(ResultExecutingContext context, 
ResultExecutionDelegate next) 
     { 
      context.HttpContext.Response.Headers.Remove("X-Frame-Options"); 

      await next(); 
     } 
    } 

はここweirednessが来るそれから私は、単純なミドルウェアを書きました。最初にクロスドメインリクエストが失敗したのは、フィルタが最後に期待どおりに機能していても、 X-Frame-Options: SAMEORIGINがまだ応答に存在するからです(私は next()のミドルウェアで確認しました。 F5キーを押すとヘッダーは応答しなくなり、すべてが正常に動作します。それは X-Frame-Optionsヘッダーでのみ発生し、カスタムメッセージは正しく削除されます。 削除された X-Frame-Optionsが応答に再び現れるのは何ですか?

答えて

9

最初のリクエストでは、Antiforgeryはクッキーを保存します。つまり、X-Frame-Optionsヘッダーを設定しようとしています。

あなたはAntiforgeryでそのヘッダを無効にし、手動でそれを自分で処理したい場合は、真であるとSuppressXFrameOptionsHeaderを設定されて何をしたい;)

services.AddAntiforgery(o => o.SuppressXFrameOptionsHeader = true);