Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Compress HTTP responses using Kestrel and .NET core middleware

I'm looking to encode HTTP responses on the fly using .NET Core and the Kestrel web server. The following code does not work, the response fails to load in the browser.

        var response = context.Response;


        if (encodingsAccepted.ToArray().Any(x => x.Contains("gzip")))
        {
            // Set Gzip stream.
            context.Response.Headers.Add("Content-Encoding", "gzip");
            // Wrap response body in Gzip stream.
            var body = context.Response.Body;


            context.Response.Body = new GZipStream(body, CompressionMode.Compress);


        }
like image 228
user2121006 Avatar asked Dec 25 '22 05:12

user2121006


1 Answers

The detailed description about response compression is available here: https://learn.microsoft.com/en-us/aspnet/core/performance/response-compression

A quick summary
Compression can be enabled in 2 steps:

  1. Add a reference to the Microsoft.AspNetCore.ResponseCompression package.
  2. Enable compression on the application startup:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddResponseCompression();
    }
    
    public void Configure(IApplicationBuilder app)
    {
        app.UseResponseCompression();
    
        ...
    }
    

That's it. Now the response will be compressed in case if the client accepts compression encoding.

like image 147
Alexander Stepaniuk Avatar answered May 16 '23 07:05

Alexander Stepaniuk