2016-11-10 5 views
6

Мне нужно удалить заголовок X-Frame-Options: SAMEORIGIN из некоторых моих действий, которые должны отображать содержимое для iframe. Пока он добавляется к запросам по умолчанию, я отключил его в Startup.cs: services.AddAntiforgery(o => o.SuppressXFrameOptionsHeader = false);. Тогда я написал простой промежуточное программное обеспечение:ASP.Net Core: X-Frame-Options странное поведение

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 сохраняет cookie, что означает, что он также пытается установить заголовок X-Frame-Options.

Если вы хотите отключить этот заголовок в Antiforgery и вручную обрабатывать сами, что вы хотите, устанавливает SuppressXFrameOptionsHeader, чтобы быть правдой;)

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