2016-08-26 7 views
4

実行中のミドルウェアの一部としてX-Powered-Byを削除できないのはなぜですか?私はweb.configに入れても削除できますが、ミドルウェアに入れないと削除できません。私はミドルウェア "Server"の別のヘッダを削除しています。 "Kestrel"は動作し、私のミドルウェアが実行されていると伝えます。asp.net core remove X-Powered-Byはミドルウェアでは実行できません

私は私のStartup.Configure方法がどのように見える私のミドルウェア

public class ManageHttpHeadersMiddleware 
{ 
    private RequestDelegate _next; 

    public ManageHttpHeadersMiddleware(RequestDelegate next) 
    { 
     _next = next; 
    } 

    public async Task Invoke(HttpContext context) 
    { 
     context.Response.OnStarting(() => 
     { 
      context.Response.Headers.Remove("Server"); 
      context.Response.Headers.Remove("X-Powered-By"); 

      return Task.CompletedTask; 
     }); 

     await _next(context); 
    } 
} 

を、Visual Studioの2015年、ASP.NetコアWebアプリケーション(.NET Frameworkの)を使用して、1.0.0-RC2-ファイナルいますこの

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
    { 
     loggerFactory.AddSerilog(new LoggerConfiguration() 
      .ReadFrom.ConfigurationSection(Configuration.GetSection("Serilog")) 
      .CreateLogger()) 
      .AddDebug(); 

     app.UseMiddleware<ManageHttpHeadersMiddleware>(); 

     app.UseJwtBearerAuthentication(); 

     app.UseMvc(); 

     app.UseSwaggerGen(); 
     app.UseSwaggerUi(); 
    } 

だから私の質問は以下のとおりです。

  1. スタートアップでミドルウェアを実行しているためですか?設定していますか?
  2. ミドルウェア で実行しているイベントのためですか?私はOnCompletedを使用しようとしましたが、明らかに遅れて "サーバー"を削除しませんでした: "Kestrel"
  3. それは がAzureのKestrelまたはIISによって追加されたためですか?唯一の除去方法は web.config ?

は、私はあなたが私の周りに仕事を持っているし、私の問題何が主張する可能性があり、保守を支援するために、などなどを同じコードの場所に同じ要件を達成するためにいいだろうということを知っている

+0

この質問は重複可能性がありますhttp://stackoverflow.com/questions/38279974/how-to-remove-server-header-using-middleware。その質問は私の自己によって尋ねられます。ミドルウェアのサーバーヘッダーを削除できることを知りたいだけですか? – dotnetstep

答えて

11

X-Powered-Byに関する問い合わせ。あなたはweb.configファイルを作成する必要があります。(IISを使って作業している場合)、サーバーによってこのようなヘッダーがある場合は、ASP.netコアの一部ではないため手動または別の方法で保守する必要があります。

あなたは私たちがホストASP.netコア要求パイプラインを理解していればそれがある

  1. ブラウザのような - IIS - ケストレル(Windowsの場合)
  2. ブラウズ - nginxの - ケストレル(Linux)の

要求がプロセスKestrelになると、IISまたはNginxに渡され、IISまたはNGInxがヘッダーを追加する可能性があります。 X-Powered-Byはそのようなヘッダーです。したがって、web.configを削除するか、IIS設定で直接削除することができます。

注:今のところ私は、古いASP.net/ASP.net MVCで、HTTPModuleを作成してすべての型ヘッダーを削除できるようなことはないと思っています。それはIISと緊密に統合されているため、そこでは可能です。

注:私は既にコメントを付けましたが、ミドルウェアを使用してサーバーヘッダーを削除できなかったことを明確にするために、私はあなたのコードを試しました。 (私はIISで試した)。

サーバーヘッダーを削除するには、次のことを行う必要があります。

new WebHostBuilder() 
    .UseKestrel(c => c.AddServerHeader = false) 
3

X-Powered-Byと他のヘッダーは、aspで再び追加されたweb.configで削除できます。ネットコア

<httpProtocol> 
    <customHeaders> 
    <remove name="X-Powered-By" /> 
    </customHeaders> 
</httpProtocol> 
関連する問題