Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Netwerkbandbreedte is een beperkte resource. Door de grootte van het antwoord te verkleinen, wordt de reactiesnelheid van een app meestal aanzienlijk verhoogd. Een manier om nettoladinggrootten te verminderen, is door de reacties van een app te comprimeren.
Compressie met HTTPS
Gecomprimeerde antwoorden via beveiligde verbindingen kunnen worden beheerd met de EnableForHttps optie, die standaard is uitgeschakeld vanwege het beveiligingsrisico. Het gebruik van compressie met dynamisch gegenereerde pagina's kan de app blootstellen aan CRIME en BREACH aanvallen. Aanvallen met CRIME en BREACH kunnen in ASP.NET Core worden beperkt met antiforgerytokens. Zie Cross-Site Request Forgery -aanvallen (XSRF/CSRF) voorkomen in ASP.NET Corevoor meer informatie. Zie voor meer informatie over het beperken van BREACH aanvallen de mitigaties bij http://www.breachattack.com/
Zelfs wanneer EnableForHttps is uitgeschakeld in de app, kunnen IIS, IIS Express en Azure App Service gzip toepassen op de IIS-webserver. Wanneer u antwoordheaders bekijkt, let op de server waarde. Een onverwachte content-encoding waarde voor de antwoordheader kan het resultaat zijn van de webserver en niet de ASP.NET Core-app-configuratie.
Wanneer gebruikt u Middleware voor antwoordcompressie
Gebruik op server gebaseerde antwoordcompressietechnologieën in IIS, Apache of Nginx. De prestaties van de middleware voor antwoordcompressie komen waarschijnlijk niet overeen met die van de servermodules. HTTP.sys server en Kestrel server bieden momenteel geen ingebouwde compressieondersteuning.
Gebruik Middleware voor antwoordcompressie wanneer de app:
- Kan de volgende servergebaseerde compressietechnologieën niet gebruiken:
 - Rechtstreeks hosten op:
 
Antwoordcompressie
Normaal gesproken kan elke reactie die niet systeemeigen gecomprimeerd is, profiteren van reactiecompressie. Antwoorden die niet systeemeigen zijn gecomprimeerd, zijn doorgaans CSS, JavaScript, HTML, XML en JSON. Comprimeer geen systeemeigen gecomprimeerde assets, zoals PNG-bestanden. Bij het verder comprimeren van een systeemeigen gecomprimeerde reactie, zal elke kleine extra reductie in grootte en transmissietijd waarschijnlijk worden overschaduwd door de tijd die nodig is om de compressie te verwerken. Comprimeer bestanden niet kleiner dan ongeveer 150-1000 bytes, afhankelijk van de inhoud van het bestand en de efficiëntie van compressie. De overhead van het comprimeren van kleine bestanden kan een gecomprimeerd bestand produceren dat groter is dan het niet-gecomprimeerde bestand.
Wanneer een client gecomprimeerde inhoud kan verwerken, moet de client de server informeren over de mogelijkheden ervan door de Accept-Encoding header met de aanvraag te verzenden. Wanneer een server gecomprimeerde inhoud verzendt, moet deze informatie bevatten in de Content-Encoding header over hoe het gecomprimeerde antwoord wordt gecodeerd. Aanduidingen voor inhoudscodering die worden ondersteund door de middleware voor antwoordcompressie, worden weergegeven in de volgende tabel.
              Accept-Encoding headerwaarden | 
Middleware ondersteund | Description | 
|---|---|---|
br | 
Ja (standaard) | Gecomprimeerde Brotli-gegevensindeling | 
deflate | 
No | DEFLATE-gecomprimeerde gegevensformaat | 
exi | 
No | W3C Efficient XML Interchange | 
gzip | 
Yes | Gzip-bestandsindeling | 
identity | 
Yes | Id 'Geen codering': het antwoord mag niet worden gecodeerd. | 
pack200-gzip | 
No | Netwerkoverdrachtindeling voor Java-archieven | 
* | 
Yes | Eventuele beschikbare inhoudscodering is niet expliciet aangevraagd | 
Zie de officiële lijst met IANA-inhoudscoderingen voor meer informatie.
Met de middleware voor antwoordcompressie kunnen extra compressieproviders worden toegevoegd voor aangepaste Accept-Encoding headerwaarden. Voor meer informatie, zie Aangepaste providers in dit artikel.
De middleware voor antwoordcompressie kan reageren op kwaliteitswaarde (qvalue, q) gewicht wanneer deze door de client wordt verzonden om prioriteit te geven aan compressieschema's. Zie RFC 9110: Accept-Encoding voor meer informatie.
Compressiealgoritmen zijn onderhevig aan een compromis tussen de compressiesnelheid en de effectiviteit van de compressie. Effectiviteit in deze context verwijst naar de grootte van de uitvoer na compressie. De kleinste grootte wordt bereikt door de optimale compressie.
De headers die betrokken zijn bij het aanvragen, verzenden, opslaan in cache en ontvangen van gecomprimeerde inhoud, worden beschreven in de volgende tabel.
| Header | Role | 
|---|---|
Accept-Encoding | 
Verzonden van de client naar de server om de inhoudscoderingsschema's aan te geven die acceptabel zijn voor de client. | 
Content-Encoding | 
Verzonden van de server naar de client om de inhoudscodering in de payload aan te geven. | 
Content-Length | 
Wanneer compressie plaatsvindt, wordt de Content-Length header verwijderd, omdat de hoofdtekstinhoud verandert wanneer het antwoord wordt gecomprimeerd. | 
Content-MD5 | 
Wanneer compressie plaatsvindt, wordt de Content-MD5 header verwijderd, omdat de hoofdtekstinhoud is gewijzigd en de hash niet meer geldig is. | 
Content-Type | 
Hiermee geeft u het MIME-type van de inhoud op. Elk antwoord moet de bijbehorende Content-Typewaarde opgeven. De middleware voor antwoordcompressie controleert deze waarde om te bepalen of het antwoord moet worden gecomprimeerd. Met de middleware voor antwoordcompressie wordt een set standaard MIME-typen opgegeven die kunnen worden gecodeerd en kunnen ze worden vervangen of toegevoegd. | 
Vary | 
Wanneer de server een waarde van Accept-Encoding naar clients en proxy's verzendt, geeft de Vary-header aan dat de client of proxy reacties moet cachen en variëren op basis van de waarde van de Accept-Encoding-header van het verzoek. Het resultaat van het retourneren van inhoud met de header is dat zowel gecomprimeerde als niet-gecomprimeerde antwoorden afzonderlijk in de Vary: Accept-Encoding cache worden opgeslagen. | 
Verken de functies van de Response Compression Middleware met de voorbeeld-app. Het voorbeeld illustreert:
- De compressie van app-antwoorden met Gzip en aangepaste compressieproviders.
 - Een MIME-type toevoegen aan de standaardlijst met MIME-typen voor compressie.
 - Een aangepaste antwoordcompressieprovider toevoegen.
 
Configuration
De volgende code laat zien hoe u de Response Compression Middleware inschakelt voor standaard MIME-typen en compressieproviders (Brotli en Gzip):
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddResponseCompression(options =>
{
    options.EnableForHttps = true;
});
var app = builder.Build();
app.UseResponseCompression();
app.MapGet("/", () => "Hello World!");
app.Run();
Notes:
- Het instellen van 
EnableForHttpsoptrueis een beveiligingsrisico. Zie Compressie met HTTPS in dit artikel voor meer informatie. - 
              
app.UseResponseCompressionmoet worden aangeroepen voor een middleware die reacties comprimeert. Zie ASP.NET Core Middlewarevoor meer informatie. - Gebruik een hulpprogramma zoals Firefox Browser Developer om de 
Accept-Encodingaanvraagheader in te stellen en de antwoordheaders, grootte en hoofdtekst te onderzoeken. 
Dien een aanvraag in bij de voorbeeld-app zonder de Accept-Encoding header en merk op dat het antwoord niet is gecomprimeerd. De Content-Encoding header bevindt zich niet in de verzameling Antwoordheaders.
Bijvoorbeeld in Firefox Developer:
- Selecteer het tabblad Netwerk.
 - Klik met de rechtermuisknop op de aanvraag in de lijst met netwerkaanvragen en selecteer Bewerken en opnieuw verzenden
 - Overschakelen 
Accept-Encoding:vangzip, deflate, brnaarnone. - Selecteer Verzenden.
 
Dien een aanvraag in bij de voorbeeld-app met een browser met behulp van de ontwikkelhulpprogramma's en kijk of het antwoord is gecomprimeerd. De Content-Encoding en Vary headers zijn aanwezig in het antwoord.
Providers
Brotli- en Gzip-compressieproviders
Gebruik de BrotliCompressionProvider functie om reacties te comprimeren met de gecomprimeerde Brotli-gegevensindeling.
Als er geen compressieproviders expliciet worden toegevoegd aan de CompressionProviderCollection:
- De Brotli-compressieprovider en Gzip-compressieprovider worden standaard toegevoegd aan de matrix van compressieproviders.
 - Compressie wordt standaard ingesteld op Brotli-compressie wanneer de gecomprimeerde Brotli-gegevensindeling wordt ondersteund door de client. Als Brotli niet wordt ondersteund door de client, wordt de compressie standaard ingesteld op Gzip wanneer de client Gzip-compressie ondersteunt.
 
Note
Documentatiekoppelingen naar .NET-referentiebron laden meestal de standaardbranch van de opslagplaats, die de huidige ontwikkeling vertegenwoordigt voor de volgende release van .NET. Als u een tag voor een specifieke release wilt selecteren, gebruikt u de Switch branches of tags vervolgkeuzelijst. Zie Een versietag selecteren van ASP.NET Core-broncode (dotnet/AspNetCore.Docs #26205)voor meer informatie.
Wanneer een compressieprovider wordt toegevoegd, worden andere providers niet toegevoegd. Als de Gzip-compressieprovider bijvoorbeeld de enige provider is die expliciet is toegevoegd, worden er geen andere compressieproviders toegevoegd.
De volgende code:
- Hiermee schakelt u antwoordcompressie in voor HTTPS-aanvragen.
 - Hiermee worden de Brotli- en Gzip-antwoordcompressieproviders toegevoegd.
 
using System.IO.Compression;
using Microsoft.AspNetCore.ResponseCompression;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddResponseCompression(options =>
{
    options.EnableForHttps = true;
    options.Providers.Add<BrotliCompressionProvider>();
    options.Providers.Add<GzipCompressionProvider>();
});
builder.Services.Configure<BrotliCompressionProviderOptions>(options =>
{
    options.Level = CompressionLevel.Fastest;
});
builder.Services.Configure<GzipCompressionProviderOptions>(options =>
{
    options.Level = CompressionLevel.SmallestSize;
});
var app = builder.Build();
app.UseResponseCompression();
app.MapGet("/", () => "Hello World!");
app.Run();
Stel het compressieniveau in met BrotliCompressionProviderOptions en GzipCompressionProviderOptions. De Brotli- en Gzip-compressieproviders zijn standaard ingesteld op het snelste compressieniveau, CompressionLevel.Fastest, wat mogelijk niet de meest efficiënte compressie produceert. Als de meest efficiënte compressie gewenst is, configureert u de middleware voor antwoordcompressie voor optimale compressie.
Zie CompressionLevel Enum voor waarden die aangeven of een compressiebewerking de snelheid of compressiegrootte benadrukt.
using System.IO.Compression;
using Microsoft.AspNetCore.ResponseCompression;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddResponseCompression(options =>
{
    options.EnableForHttps = true;
    options.Providers.Add<BrotliCompressionProvider>();
    options.Providers.Add<GzipCompressionProvider>();
});
builder.Services.Configure<BrotliCompressionProviderOptions>(options =>
{
    options.Level = CompressionLevel.Fastest;
});
builder.Services.Configure<GzipCompressionProviderOptions>(options =>
{
    options.Level = CompressionLevel.SmallestSize;
});
var app = builder.Build();
app.UseResponseCompression();
app.MapGet("/", () => "Hello World!");
app.Run();
Aangepaste providers
Aangepaste compressie-implementaties maken met ICompressionProvider. Het EncodingName vertegenwoordigt de inhoudscodering die deze ICompressionProvider produceert. De middleware voor antwoordcompressie gebruikt deze informatie om de provider te kiezen op basis van de lijst die is opgegeven in de Accept-Encoding header van de aanvraag.
Aanvragen voor de voorbeeld-app met de Accept-Encoding: mycustomcompression header retourneren een antwoord met een Content-Encoding: mycustomcompression header. De client moet de aangepaste codering kunnen decomprimeren om een aangepaste compressie-implementatie te laten werken.
using Microsoft.AspNetCore.ResponseCompression;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddResponseCompression(options =>
{
    options.Providers.Add<BrotliCompressionProvider>();
    options.Providers.Add<GzipCompressionProvider>();
    options.Providers.Add<CustomCompressionProvider>();
});
var app = builder.Build();
app.UseResponseCompression();
app.MapGet("/", () => "Hello World!");
app.Run();
using Microsoft.AspNetCore.ResponseCompression;
public class CustomCompressionProvider : ICompressionProvider
{
    public string EncodingName => "mycustomcompression";
    public bool SupportsFlush => true;
    public Stream CreateStream(Stream outputStream)
    {
        // Replace with a custom compression stream wrapper.
        return outputStream;
    }
}
Met de voorgaande code wordt de hoofdtekst van het antwoord niet gecomprimeerd door het voorbeeld. In het voorbeeld ziet u echter waar u een aangepast compressie-algoritme kunt implementeren.
MIME-typen
Met de middleware voor antwoordcompressie wordt een standaardset MIME-typen voor compressie opgegeven. Zie de broncode voor een volledige lijst met ondersteunde MIME-typen.
Note
Documentatiekoppelingen naar .NET-referentiebron laden meestal de standaardbranch van de opslagplaats, die de huidige ontwikkeling vertegenwoordigt voor de volgende release van .NET. Als u een tag voor een specifieke release wilt selecteren, gebruikt u de Switch branches of tags vervolgkeuzelijst. Zie Een versietag selecteren van ASP.NET Core-broncode (dotnet/AspNetCore.Docs #26205)voor meer informatie.
MIME-typen vervangen of toevoegen door ResponseCompressionOptions.MimeTypes. Houd er rekening mee dat MIME-typen jokertekens, zoals text/* niet worden ondersteund. De voorbeeld-app voegt een MIME-type toe voor image/svg+xml en comprimeert de ASP.NET Core-bannerafbeelding banner.svg.
using Microsoft.AspNetCore.ResponseCompression;
using ResponseCompressionSample;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddResponseCompression(options =>
{
    options.EnableForHttps = true;
    options.Providers.Add<BrotliCompressionProvider>();
    options.Providers.Add<GzipCompressionProvider>();
    options.Providers.Add<CustomCompressionProvider>();
    options.MimeTypes =
    ResponseCompressionDefaults.MimeTypes.Concat(
        new[] { "image/svg+xml" });
});
var app = builder.Build();
app.UseResponseCompression();
De header Vary toevoegen
Bij het comprimeren van antwoorden op basis van de Accept-Encoding aanvraagheader zijn er niet-gecomprimeerde en meerdere gecomprimeerde versies van het antwoord mogelijk. Als u client- en proxycaches wilt instrueren dat er meerdere versies bestaan en moeten worden opgeslagen, wordt de Vary header toegevoegd met een Accept-Encoding waarde. De antwoord-middleware voegt de Vary header automatisch toe wanneer het antwoord wordt gecomprimeerd.
Note
Documentatiekoppelingen naar .NET-referentiebron laden meestal de standaardbranch van de opslagplaats, die de huidige ontwikkeling vertegenwoordigt voor de volgende release van .NET. Als u een tag voor een specifieke release wilt selecteren, gebruikt u de Switch branches of tags vervolgkeuzelijst. Zie Een versietag selecteren van ASP.NET Core-broncode (dotnet/AspNetCore.Docs #26205)voor meer informatie.
Probleem met middleware wanneer het zich achter een Nginx reverse proxy bevindt
Wanneer een aanvraag wordt geproxied door Nginx, wordt de Accept-Encoding header verwijderd. Het verwijderen van de Accept-Encoding header voorkomt dat de middleware voor antwoordcompressie het antwoord comprimeert. Zie NGINX: Compressie en Decompressie voor meer informatie. Dit probleem wordt bijgehouden door passthrough-compressie voor Nginx (dotnet/aspnetcore#5989) te achterhalen.
Dynamische IIS-compressie uitschakelen
Zie IIS-modules uitschakelen om de dynamische compressie module uit te schakelen die op serverniveau is geconfigureerd.
Problemen met antwoordcompressie oplossen
Gebruik een hulpprogramma zoals Firefox Browser Developer, waarmee u de Accept-Encoding aanvraagheader kunt instellen en de antwoordheaders, grootte en hoofdtekst kunt bestuderen. Standaard comprimeert Middleware voor antwoordcompressie reacties die voldoen aan de volgende voorwaarden:
- De 
Accept-Encodingheader is aanwezig met een waarde vanbr,gzipof*aangepaste codering die overeenkomt met een aangepaste compressieprovider. De waarde mag nietidentityzijn of een kwaliteitswaarde (qvalue,q) van 0 (nul) hebben. - Het MIME-type (
Content-Type) moet worden ingesteld en moet overeenkomen met een MIME-type dat is geconfigureerd op de ResponseCompressionOptions. - De aanvraag mag de 
Content-Rangeheader niet bevatten. - De aanvraag moet gebruikmaken van het onveilige protocol (http), tenzij secure protocol (https) is geconfigureerd in de middlewareopties voor antwoordcompressie. Let op het hierboven beschreven gevaar bij het inschakelen van beveiligde inhoudscompressie.
 
Voorbeeld geïmplementeerd in Azure
De voorbeeld-app die in Azure is geïmplementeerd, heeft het volgende Program.cs bestand:
using Microsoft.AspNetCore.ResponseCompression;
using ResponseCompressionSample;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddResponseCompression(options =>
{
    options.EnableForHttps = true;
    options.Providers.Add<BrotliCompressionProvider>();
    options.Providers.Add<GzipCompressionProvider>();
    options.Providers.Add<CustomCompressionProvider>();
    options.MimeTypes =
    ResponseCompressionDefaults.MimeTypes.Concat(
        new[] { "image/svg+xml" });
});
var app = builder.Build();
app.UseResponseCompression();
app.Map("/trickle", async (HttpResponse httpResponse) =>
{
    httpResponse.ContentType = "text/plain;charset=utf-8";
    for (int i = 0; i < 20; i++)
    {
        await httpResponse.WriteAsync("a");
        await httpResponse.Body.FlushAsync();
        await Task.Delay(TimeSpan.FromMilliseconds(50));
    }
});
app.Map("/testfile1kb.txt", () => Results.File(
    app.Environment.ContentRootFileProvider.GetFileInfo("testfile1kb.txt").PhysicalPath,
    "text/plain;charset=utf-8"));
app.Map("/banner.svg", () => Results.File(
    app.Environment.ContentRootFileProvider.GetFileInfo("banner.svg").PhysicalPath,
    "image/svg+xml;charset=utf-8"));
app.MapFallback(() => LoremIpsum.Text);
app.Run();
Aanvullende bronnen
Note
Documentatiekoppelingen naar .NET-referentiebron laden meestal de standaardbranch van de opslagplaats, die de huidige ontwikkeling vertegenwoordigt voor de volgende release van .NET. Als u een tag voor een specifieke release wilt selecteren, gebruikt u de Switch branches of tags vervolgkeuzelijst. Zie Een versietag selecteren van ASP.NET Core-broncode (dotnet/AspNetCore.Docs #26205)voor meer informatie.
Netwerkbandbreedte is een beperkte resource. Door de grootte van het antwoord te verkleinen, wordt de reactiesnelheid van een app meestal aanzienlijk verhoogd. Een manier om nettoladinggrootten te verminderen, is door de reacties van een app te comprimeren.
Voorbeeldcode bekijken of downloaden (hoe download je)
Wanneer gebruikt u Middleware voor antwoordcompressie
Gebruik op server gebaseerde antwoordcompressietechnologieën in IIS, Apache of Nginx. De prestaties van de middleware komen waarschijnlijk niet overeen met die van de servermodules. HTTP.sys server en Kestrel server bieden momenteel geen ingebouwde compressieondersteuning.
Gebruik Middleware voor antwoordcompressie wanneer u:
- Kan de volgende servergebaseerde compressietechnologieën niet gebruiken:
 - Rechtstreeks hosten op: 
- HTTP.sys server (voorheen WebListener genoemd)
 - Kestrel server
 
 
Antwoordcompressie
Normaal gesproken kan elke reactie die niet systeemeigen gecomprimeerd is, profiteren van reactiecompressie. Antwoorden die niet standaard zijn gecomprimeerd, zijn onder andere CSS, JavaScript, HTML, XML en JSON. U moet systeemeigen gecomprimeerde assets, zoals PNG-bestanden, niet comprimeren. Als u probeert een systeemeigen gecomprimeerde reactie verder te comprimeren, zal elke kleine extra vermindering van de grootte en transmissietijd waarschijnlijk worden overschaduwd door de tijd die nodig was om de compressie te verwerken. Comprimeer bestanden niet kleiner dan ongeveer 150-1000 bytes (afhankelijk van de inhoud van het bestand en de efficiëntie van compressie). De overhead van het comprimeren van kleine bestanden kan een gecomprimeerd bestand produceren dat groter is dan het niet-gecomprimeerde bestand.
Wanneer een client gecomprimeerde inhoud kan verwerken, moet de client de server informeren over de mogelijkheden ervan door de Accept-Encoding header met de aanvraag te verzenden. Wanneer een server gecomprimeerde inhoud verzendt, moet deze informatie bevatten in de Content-Encoding header over hoe het gecomprimeerde antwoord wordt gecodeerd. Aanduidingen voor inhoudscodering die door de middleware worden ondersteund, worden weergegeven in de volgende tabel.
              Accept-Encoding headerwaarden | 
Middleware ondersteund | Description | 
|---|---|---|
br | 
Ja (standaard) | Gecomprimeerde Brotli-gegevensindeling | 
deflate | 
No | DEFLATE-gecomprimeerde gegevensformaat | 
exi | 
No | W3C Efficient XML Interchange | 
gzip | 
Yes | Gzip-bestandsindeling | 
identity | 
Yes | Id 'Geen codering': het antwoord mag niet worden gecodeerd. | 
pack200-gzip | 
No | Netwerkoverdrachtindeling voor Java-archieven | 
* | 
Yes | Eventuele beschikbare inhoudscodering is niet expliciet aangevraagd | 
Zie de officiële lijst met IANA-inhoudscoderingen voor meer informatie.
Met de middleware kunt u extra compressieproviders toevoegen voor aangepaste Accept-Encoding headerwaarden. Voor meer informatie, zie Custom Providers hieronder.
De middleware kan reageren op kwaliteitswaarde (qvalue, q) gewicht wanneer deze door de client wordt verzonden om prioriteit te geven aan compressieschema's. Zie RFC 9110: Accept-Encoding voor meer informatie.
Compressiealgoritmen zijn onderhevig aan een compromis tussen de compressiesnelheid en de effectiviteit van de compressie. Effectiviteit in deze context verwijst naar de grootte van de uitvoer na compressie. De kleinste grootte wordt bereikt door de meest optimale compressie.
De headers die betrokken zijn bij het aanvragen, verzenden, opslaan in cache en ontvangen van gecomprimeerde inhoud, worden beschreven in de onderstaande tabel.
| Header | Role | 
|---|---|
Accept-Encoding | 
Verzonden van de client naar de server om de inhoudscoderingsschema's aan te geven die acceptabel zijn voor de client. | 
Content-Encoding | 
Verzonden van de server naar de client om de inhoudscodering in de payload aan te geven. | 
Content-Length | 
Wanneer compressie plaatsvindt, wordt de Content-Length header verwijderd, omdat de hoofdtekstinhoud verandert wanneer het antwoord wordt gecomprimeerd. | 
Content-MD5 | 
Wanneer compressie plaatsvindt, wordt de Content-MD5 header verwijderd, omdat de hoofdtekstinhoud is gewijzigd en de hash niet meer geldig is. | 
Content-Type | 
Hiermee geeft u het MIME-type van de inhoud op. Elk antwoord moet de bijbehorende Content-Typewaarde opgeven. De middleware controleert deze waarde om te bepalen of het antwoord moet worden gecomprimeerd. Met de middleware wordt een set standaard MIME-typen opgegeven die kunnen worden gecodeerd, maar u kunt MIME-typen vervangen of toevoegen. | 
Vary | 
Wanneer de server een waarde van Accept-Encoding naar clients en proxy's verzendt, geeft de Vary-header aan dat de client of proxy reacties moet cachen en variëren op basis van de waarde van de Accept-Encoding-header van het verzoek. Het resultaat van het retourneren van inhoud met de header is dat zowel gecomprimeerde als niet-gecomprimeerde antwoorden afzonderlijk in de Vary: Accept-Encoding cache worden opgeslagen. | 
Verken de functies van de Response Compression Middleware met de voorbeeld-app. Het voorbeeld illustreert:
- De compressie van app-antwoorden met Gzip en aangepaste compressieproviders.
 - Een MIME-type toevoegen aan de standaardlijst met MIME-typen voor compressie.
 
Configuration
De volgende code laat zien hoe u de Response Compression Middleware inschakelt voor standaard MIME-typen en compressieproviders (Brotli en Gzip):
public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddResponseCompression();
    }
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.UseResponseCompression();
    }
}
Notes:
- 
              
app.UseResponseCompressionmoet worden aangeroepen vóór alle middleware die responses comprimeert. Zie ASP.NET Core Middlewarevoor meer informatie. - Gebruik een hulpprogramma zoals Fiddler, Firefox Browser Developer om de 
Accept-Encodingaanvraagheader in te stellen en de antwoordheaders, grootte en hoofdtekst te bestuderen. 
Dien een aanvraag in bij de voorbeeld-app zonder de Accept-Encoding header en merk op dat het antwoord niet is gecomprimeerd. De Content-Encoding en Vary headers zijn niet aanwezig in het antwoord.
              
              
            
Dien een aanvraag in bij de voorbeeld-app met de Accept-Encoding: br header (Brotli-compressie) en merk op dat het antwoord is gecomprimeerd. De Content-Encoding en Vary headers zijn aanwezig in het antwoord.
              
              
            
Providers
Brotli-compressieprovider
Gebruik de BrotliCompressionProvider functie om reacties te comprimeren met de gecomprimeerde Brotli-gegevensindeling.
Als er geen compressieproviders expliciet aan het volgende CompressionProviderCollection worden toegevoegd:
- De Brotli Compression Provider wordt standaard toegevoegd aan de matrix van compressieproviders samen met de Gzip-compressieprovider.
 - Compressie wordt standaard ingesteld op Brotli-compressie wanneer de gecomprimeerde Brotli-gegevensindeling wordt ondersteund door de client. Als Brotli niet wordt ondersteund door de client, wordt de compressie standaard ingesteld op Gzip wanneer de client Gzip-compressie ondersteunt.
 
public void ConfigureServices(IServiceCollection services)
{
    services.AddResponseCompression();
}
De Brotli-compressieprovider moet worden toegevoegd wanneer compressieproviders expliciet worden toegevoegd:
public void ConfigureServices(IServiceCollection services)
{
    services.AddResponseCompression(options =>
    {
        options.Providers.Add<BrotliCompressionProvider>();
        options.Providers.Add<GzipCompressionProvider>();
        options.Providers.Add<CustomCompressionProvider>();
        options.MimeTypes = 
            ResponseCompressionDefaults.MimeTypes.Concat(
                new[] { "image/svg+xml" });
    });
}
Stel het compressieniveau in met BrotliCompressionProviderOptions. De Brotli Compression Provider is standaard ingesteld op het snelste compressieniveau (CompressionLevel.Fastest), wat mogelijk niet de meest efficiënte compressie produceert. Als u de meest efficiënte compressie wilt, configureert u de middleware voor optimale compressie.
| Compressieniveau | Description | 
|---|---|
| CompressionLevel.Fastest | Compressie moet zo snel mogelijk worden voltooid, zelfs als de resulterende uitvoer niet optimaal is gecomprimeerd. | 
| CompressionLevel.NoCompression | Er mag geen compressie worden uitgevoerd. | 
| CompressionLevel.Optimal | Reacties moeten optimaal worden gecomprimeerd, zelfs als de compressie meer tijd kost om te voltooien. | 
public void ConfigureServices(IServiceCollection services)
{
    services.AddResponseCompression();
    services.Configure<BrotliCompressionProviderOptions>(options => 
    {
        options.Level = CompressionLevel.Fastest;
    });
}
Gzip-compressieprovider
Gebruik de GzipCompressionProvider indeling om reacties te comprimeren met de Gzip-bestandsindeling.
Als er geen compressieproviders expliciet aan het volgende CompressionProviderCollection worden toegevoegd:
- De Gzip-compressieprovider wordt standaard toegevoegd aan de matrix van compressieproviders samen met de Brotli-compressieprovider.
 - Compressie wordt standaard ingesteld op Brotli-compressie wanneer de gecomprimeerde Brotli-gegevensindeling wordt ondersteund door de client. Als Brotli niet wordt ondersteund door de client, wordt de compressie standaard ingesteld op Gzip wanneer de client Gzip-compressie ondersteunt.
 
public void ConfigureServices(IServiceCollection services)
{
    services.AddResponseCompression();
}
De Gzip-compressieprovider moet worden toegevoegd wanneer compressieproviders expliciet worden toegevoegd:
public void ConfigureServices(IServiceCollection services)
{
    services.AddResponseCompression(options =>
    {
        options.Providers.Add<BrotliCompressionProvider>();
        options.Providers.Add<GzipCompressionProvider>();
        options.Providers.Add<CustomCompressionProvider>();
        options.MimeTypes = 
            ResponseCompressionDefaults.MimeTypes.Concat(
                new[] { "image/svg+xml" });
    });
}
Stel het compressieniveau in met GzipCompressionProviderOptions. De Gzip-compressieprovider is standaard ingesteld op het snelste compressieniveau (CompressionLevel.Fastest), wat mogelijk niet de meest efficiënte compressie produceert. Als u de meest efficiënte compressie wilt, configureert u de middleware voor optimale compressie.
| Compressieniveau | Description | 
|---|---|
| CompressionLevel.Fastest | Compressie moet zo snel mogelijk worden voltooid, zelfs als de resulterende uitvoer niet optimaal is gecomprimeerd. | 
| CompressionLevel.NoCompression | Er mag geen compressie worden uitgevoerd. | 
| CompressionLevel.Optimal | Reacties moeten optimaal worden gecomprimeerd, zelfs als de compressie meer tijd kost om te voltooien. | 
public void ConfigureServices(IServiceCollection services)
{
    services.AddResponseCompression();
    services.Configure<GzipCompressionProviderOptions>(options => 
    {
        options.Level = CompressionLevel.Fastest;
    });
}
Aangepaste providers
Aangepaste compressie-implementaties maken met ICompressionProvider. Het EncodingName vertegenwoordigt de inhoudscodering die deze ICompressionProvider produceert. De middleware gebruikt deze informatie om de provider te kiezen op basis van de lijst die is opgegeven in de Accept-Encoding header van de aanvraag.
Met behulp van de voorbeeld-app verzendt de client een aanvraag met de Accept-Encoding: mycustomcompression header. De middleware maakt gebruik van de aangepaste compressie-implementatie en retourneert het antwoord met een Content-Encoding: mycustomcompression header. De client moet de aangepaste codering kunnen decomprimeren om een aangepaste compressie-implementatie te laten werken.
public void ConfigureServices(IServiceCollection services)
{
    services.AddResponseCompression(options =>
    {
        options.Providers.Add<BrotliCompressionProvider>();
        options.Providers.Add<GzipCompressionProvider>();
        options.Providers.Add<CustomCompressionProvider>();
        options.MimeTypes = 
            ResponseCompressionDefaults.MimeTypes.Concat(
                new[] { "image/svg+xml" });
    });
}
public class CustomCompressionProvider : ICompressionProvider
{
    public string EncodingName => "mycustomcompression";
    public bool SupportsFlush => true;
    public Stream CreateStream(Stream outputStream)
    {
        // Create a custom compression stream wrapper here
        return outputStream;
    }
}
Dien een aanvraag in bij de voorbeeld-app met de Accept-Encoding: mycustomcompression header en bekijk de antwoordheaders. De Vary en Content-Encoding headers zijn aanwezig in het antwoord. De antwoordtekst (niet weergegeven) wordt niet gecomprimeerd door het voorbeeld. Er is geen compressie-implementatie in de CustomCompressionProvider klasse van het voorbeeld. In het voorbeeld ziet u echter waar u een dergelijk compressie-algoritme zou implementeren.
              
              
            
MIME-typen
De middleware geeft een standaardset MIME-typen op voor compressie:
application/javascriptapplication/jsonapplication/xmltext/csstext/htmltext/jsontext/plaintext/xml
Vervang of voeg MIME-typen toe aan de middlewareopties voor antwoordcompressie. Houd er rekening mee dat MIME-typen jokertekens, zoals text/* niet worden ondersteund. De voorbeeld-app voegt een MIME-type toe voor image/svg+xml en comprimeert de ASP.NET Core-bannerafbeelding (banner.svg).
public void ConfigureServices(IServiceCollection services)
{
    services.AddResponseCompression(options =>
    {
        options.Providers.Add<BrotliCompressionProvider>();
        options.Providers.Add<GzipCompressionProvider>();
        options.Providers.Add<CustomCompressionProvider>();
        options.MimeTypes = 
            ResponseCompressionDefaults.MimeTypes.Concat(
                new[] { "image/svg+xml" });
    });
}
Compressie met beveiligd protocol
Gecomprimeerde antwoorden via beveiligde verbindingen kunnen worden beheerd met de EnableForHttps optie, die standaard is uitgeschakeld. Het gebruik van compressie met dynamisch gegenereerde pagina's kan leiden tot beveiligingsproblemen zoals de CRIME en BREACH aanvallen.
De header Vary toevoegen
Bij het comprimeren van antwoorden op basis van de Accept-Encoding header zijn er mogelijk meerdere gecomprimeerde versies van het antwoord en een niet-gecomprimeerde versie. Als u client- en proxycaches wilt instrueren dat er meerdere versies bestaan en moeten worden opgeslagen, wordt de Vary header toegevoegd met een Accept-Encoding waarde. In ASP.NET Core 2.0 of hoger voegt de middleware de Vary header automatisch toe wanneer het antwoord wordt gecomprimeerd.
Probleem met middleware wanneer het zich achter een Nginx reverse proxy bevindt
Wanneer een aanvraag wordt geproxied door Nginx, wordt de Accept-Encoding header verwijderd. Het verwijderen van de Accept-Encoding header voorkomt dat de middleware het antwoord comprimeert. Zie NGINX: Compressie en Decompressie voor meer informatie. Dit probleem wordt bijgehouden door passthrough-compressie voor Nginx (dotnet/aspnetcore#5989) te achterhalen.
Werken met dynamische IIS-compressie
Als u een actieve MODULE voor dynamische IIS-compressie hebt geconfigureerd op serverniveau die u wilt uitschakelen voor een app, schakelt u de module uit met een aanvulling op het web.config bestand. Zie IIS-modules uitschakelen voor meer informatie.
Troubleshooting
Gebruik een hulpprogramma zoals Fiddler of Firefox Browser Developer, waarmee u de Accept-Encoding aanvraagheader kunt instellen en de antwoordheaders, grootte en hoofdtekst kunt bestuderen. Standaard comprimeert Middleware voor antwoordcompressie reacties die voldoen aan de volgende voorwaarden:
- De 
Accept-Encodingheader is aanwezig met een waarde vanbr,gzipof*aangepaste codering die overeenkomt met een aangepaste compressieprovider die u hebt ingesteld. De waarde mag nietidentityzijn of een kwaliteitswaarde (qvalue,q) van 0 (nul) hebben. - Het MIME-type (
Content-Type) moet worden ingesteld en moet overeenkomen met een MIME-type dat is geconfigureerd op de ResponseCompressionOptions. - De aanvraag mag de 
Content-Rangeheader niet bevatten. - De aanvraag moet gebruikmaken van het onveilige protocol (http), tenzij secure protocol (https) is geconfigureerd in de middlewareopties voor antwoordcompressie. Let op het hierboven beschreven gevaar bij het inschakelen van beveiligde inhoudscompressie.