Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A hálózati sávszélesség korlátozott erőforrás. A válasz méretének csökkentése általában növeli az alkalmazások válaszkészségét, gyakran drámai módon. A hasznos adatok méretének csökkentésének egyik módja az alkalmazás válaszainak tömörítése.
Tömörítés HTTPS-vel
A biztonságos kapcsolatokon keresztüli tömörített válaszok szabályozhatók a EnableForHttps beállítással, amely alapértelmezés szerint le van tiltva a biztonsági kockázat miatt. A dinamikusan generált oldalakkal végzett tömörítés kitevheti az alkalmazást CRIME és BREACH támadásoknak. CRIME és BREACH támadások enyhíthetők ASP.NET Core-ban antiforgery tokenekkel. További információért lásd: Az ASP.NET Core alkalmazásban történő helyek közötti kéréshamisítás (XSRF/CSRF) elleni támadások megakadályozása. A támadások enyhítéséről BREACH további információt a következő címen talál: http://www.breachattack.com/
Az IIS, az IIS Express és az EnableForHttps akkor is alkalmazhat gzipet az IIS-webkiszolgálón, ha le van tiltva az alkalmazásban. A válaszfejlécek áttekintésekor jegyezze fel a kiszolgáló értékét. A válaszfejléc váratlan content-encoding értéke lehet a webkiszolgáló eredménye, és nem a ASP.NET Core-alkalmazás konfigurációja.
Mikor érdemes használni a Választömörítés köztes szoftvert?
Kiszolgálóalapú választömörítési technológiákat használhat az IIS, az Apache vagy az Nginx rendszerben. A választömörítési köztes szoftver teljesítménye valószínűleg nem egyezik meg a kiszolgálómodulok teljesítményével. HTTP.sys kiszolgáló és Kestrel kiszolgáló jelenleg nem nyújt beépített tömörítési támogatást.
Használja a válasz tömörítést biztosító köztes szoftvert, amikor az alkalmazás:
- A következő kiszolgálóalapú tömörítési technológiák nem használhatók:
- Közvetlen hosztolás:
Választömörítés
A nem natívan tömörített válaszok általában kihasználhatják a választömörítés előnyeit. Natív módon nem tömörített válaszok általában: CSS, JavaScript, HTML, XML, JSON. Ne tömörítse natívan tömörített objektumokat, például PNG-fájlokat. A natívan tömörített válasz további tömörítésekor a tömörítés feldolgozásához szükséges idő valószínűleg háttérbe szorítja a méret és az átviteli idő kis mértékű csökkentését. A fájl tartalmától és a tömörítés hatékonyságától függően ne tömörítse a 150–1000 bájtnál kisebb fájlokat. A kis méretű fájlok tömörítésének többletterhelése a tömörítetlen fájlnál nagyobb tömörített fájlt eredményezhet.
Ha egy ügyfél feldolgozhatja a tömörített tartalmat, az ügyfélnek tájékoztatnia kell a kiszolgálót a képességeiről a Accept-Encoding fejléc kéréssel való elküldésével. Ha egy kiszolgáló tömörített tartalmat küld, a fejlécnek tartalmaznia kell a Content-Encoding tömörített válasz kódolásának módját. A választömörítési köztes szoftver által támogatott tartalomkódolási megjelölések az alábbi táblázatban láthatók.
Accept-Encoding fejlécértékek |
Köztes szoftver támogatott | Description |
|---|---|---|
br |
Igen (alapértelmezett) | Brotli tömörített adatformátum |
deflate |
No | DEFLATE tömörített adatformátum |
exi |
No | W3C Efficient XML Interchange |
gzip |
Yes | Gzip fájlformátum |
identity |
Yes | "Nincs kódolás" azonosító: A válasz nem kódolható. |
pack200-gzip |
No | Hálózatátviteli formátum Java-archívumokhoz |
* |
Yes | Bármilyen elérhető tartalomkódolás, amely nincs explicit módon kérve |
További információkért lásd az IANA hivatalos tartalomkódolási listáját.
A választömörítés közbenső szoftvere további tömörítési szolgáltatók hozzáadását teszi lehetővé az egyéni Accept-Encoding fejlécértékekhez. További információ: Egyéni szolgáltatók ebben a cikkben.
A válasz tömörítésére szolgáló köztes szoftver képes reagálni a minőségi értéket (qvalue) tartalmazó súlyozásra, amikor az ügyfél elküldi a tömörítési sémák rangsorolására. További információ: RFC 9110: Accept-Encoding.
A tömörítési algoritmusok közötti különbség a tömörítés sebessége és a tömörítés hatékonysága között van. A hatékonyság ebben a kontextusban a kimenet tömörítés utáni méretére utal. A legkisebb méret az optimális tömörítéssel érhető el.
A tömörített tartalom igénylésében, küldésében, gyorsítótárazásában és fogadásában részt vevő fejléceket az alábbi táblázat ismerteti.
| Header | Role |
|---|---|
Accept-Encoding |
Elküldve az ügyféltől a kiszolgálónak, hogy jelezze az ügyfél számára elfogadható tartalomkódolási sémákat. |
Content-Encoding |
A szerverről az ügyfélhez küldött üzenet jelzi a hasznos teher tartalmának kódolását. |
Content-Length |
Tömörítés esetén a Content-Length fejléc el lesz távolítva, mivel a törzs tartalma megváltozik a válasz tömörítésekor. |
Content-MD5 |
Tömörítés esetén a rendszer eltávolítja a Content-MD5 fejlécet, mivel a törzs tartalma megváltozott, és a kivonat már nem érvényes. |
Content-Type |
A tartalom MIME-típusát adja meg. Minden válasznak meg kell határoznia annak Content-Type. A választömörítés köztes szoftvere ellenőrzi ezt az értéket annak megállapításához, hogy a válasz tömörítése szükséges-e. A választömörítési köztes szoftver meghatározza az alapértelmezett MIME-típusokat , amelyeket kódolhat, és lecserélhetik vagy hozzáadhatják őket. |
Vary |
Amikor a kiszolgáló Accept-Encoding értékű fejlécet küld az ügyfélnek vagy a proxynak, a Vary fejléc azt jelezheti, hogy a kérés Accept-Encoding fejlécének értéke alapján variálva kell gyorsítótárazni a válaszokat. A Vary: Accept-Encoding fejlécet használó tartalom visszaadásának eredménye, hogy a tömörített és a tömörítetlen válaszok külön-külön kerülnek gyorsítótárazásra. |
A választömörítési köztes szoftver funkcióinak megismerése a mintaalkalmazással. A minta a következőket szemlélteti:
- Az alkalmazásválaszok tömörítése a Gzip és az egyéni tömörítési szolgáltatók használatával.
- MIME-típus hozzáadása a tömörítéshez használt MIME-típusok alapértelmezett listájához.
- Egyéni választömörítési szolgáltató hozzáadása.
Configuration
Az alábbi kód bemutatja, hogyan engedélyezheti a Választömörítés közbenső szoftverét az alapértelmezett MIME-típusok és tömörítési szolgáltatók (Brotli és Gzip) esetében:
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:
-
EnableForHttpsbeállításatruebiztonsági kockázatot jelent. További információt ebben a cikkben a HTTPS-vel történő tömörítéssel kapcsolatban talál. -
app.UseResponseCompression-t a válaszokat tömörítő köztes szoftver előtt kell meghívni. További információ: ASP.NET Core Middleware. - A kérés fejlécének beállításához és a válasz fejlécének, méretének és törzsének vizsgálatához használjon olyan eszközt, mint a
Accept-Encoding.
Küldjön egy kérést a mintaalkalmazásnak a Accept-Encoding fejléc nélkül, és figyelje meg, hogy a válasz nincs tömörítve. Az Content-Encoding fejléc nincs a válaszfejlécek gyűjteményben.
Például a Firefox Developerben:
- Válassza a hálózat fület.
- Kattintson a jobb gombbal a kérésre a Hálózati kérelem listában, és válassza a Szerkesztés és az újraküldés lehetőséget
-
Accept-Encoding:módosításagzip, deflate, br-rólnone-ra. - Válassza a Küldés lehetőséget.
Küldjön egy kérést a mintaalkalmazásnak egy böngészővel a fejlesztői eszközök használatával, és figyelje meg, hogy a válasz tömörítve van. A válasz tartalmazza a Content-Encoding és Vary fejléceket.
Providers
Brotli- és Gzip-tömörítési szolgáltatók
Használja a BrotliCompressionProvider a válaszok tömörítésére a Brotli tömörített adatformátumával.
Ha a rendszer nem ad hozzá kifejezetten tömörítési szolgáltatókat a CompressionProviderCollectionkövetkezőhöz:
- A Brotli tömörítési szolgáltató és a Gzip tömörítési szolgáltató alapértelmezés szerint hozzáadódik a tömörítési szolgáltatók tömbjéhez.
- A tömörítés alapértelmezés szerint Brotli-tömörítés, ha az ügyfél támogatja a Brotli tömörített adatformátumot. Ha az ügyfél nem támogatja a Brotli-t, a tömörítés alapértelmezés szerint gzip lesz, ha az ügyfél támogatja a Gzip-tömörítést.
Note
A .NET referenciaforrásra mutató dokumentációs hivatkozások általában betöltik az adattár alapértelmezett ágát, amely a .NET következő kiadásának aktuális fejlesztését jelöli. Egy adott kiadás címkéjének kiválasztásához használja az Ágak vagy címkék közötti váltás legördülő listát. További információ: A ASP.NET Core-forráskód (dotnet/AspNetCore.Docs #26205) verziócímkéjének kiválasztása.
Tömörítési szolgáltató hozzáadásakor a rendszer nem ad hozzá más szolgáltatókat. Ha például a Gzip-tömörítési szolgáltató az egyetlen kifejezetten hozzáadott szolgáltató, akkor más tömörítési szolgáltatók nem lesznek hozzáadva.
A következő kód:
- Engedélyezi a HTTPS-kérelmek választömörítését.
- Hozzáadja a Brotli és gzip választömörítési szolgáltatókat.
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();
A tömörítési szint beállítása a következővel BrotliCompressionProviderOptions : és GzipCompressionProviderOptions. A Brotli és a Gzip tömörítési szolgáltatók alapértelmezés szerint a leggyorsabb tömörítési szintre( CompressionLevel.Leggyorsabb), amely nem a leghatékonyabb tömörítést hozza létre. Ha a leghatékonyabb tömörítésre van szükség, konfigurálja a választömörítés közbenső szoftverét az optimális tömörítés érdekében.
A tömörítési művelet sebességét vagy tömörítési méretét jelző értékekről a CompressionLevel Enum című témakörben olvashat.
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();
Egyéni szolgáltatók
Egyéni tömörítési implementációk létrehozása a ICompressionProvider segítségével. Az EncodingName ez ICompressionProvider által előállított tartalomkódolást jelöli. A választömörítési köztes szoftver ezen információk alapján választja ki a szolgáltatót a Accept-Encoding kérés fejlécében megadott lista alapján.
A fejlécet tartalmazó Accept-Encoding: mycustomcompression mintaalkalmazáshoz érkező kérések fejléces Content-Encoding: mycustomcompression választ adnak vissza. Az ügyfélnek képesnek kell lennie az egyéni kódolás kibontására ahhoz, hogy az egyéni tömörítési implementáció működjön.
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;
}
}
Az előző kóddal a válasz törzsét nem tömöríti a minta. A minta azonban bemutatja, hol kell implementálni egy egyéni tömörítési algoritmust.
MIME-típusok
A választömörítés közbenső szoftvere a mime-típusok alapértelmezett készletét adja meg a tömörítéshez. A támogatott MIME-típusok teljes listáját a forráskódban találja.
Note
A .NET referenciaforrásra mutató dokumentációs hivatkozások általában betöltik az adattár alapértelmezett ágát, amely a .NET következő kiadásának aktuális fejlesztését jelöli. Egy adott kiadás címkéjének kiválasztásához használja az Ágak vagy címkék közötti váltás legördülő listát. További információ: A ASP.NET Core-forráskód (dotnet/AspNetCore.Docs #26205) verziócímkéjének kiválasztása.
Cserélje le vagy fűzze hozzá a MIME-típusokat a ResponseCompressionOptions.MimeTypesgombra. Vegye figyelembe, hogy a helyettesítő karakterek MIME-típusai, például text/* nem támogatottak. A mintaalkalmazás hozzáad egy MIME-típust a image/svg+xml számára, tömöríti és kiszolgálja az ASP.NET Core bannert, amely a 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();
A Vary fejléc hozzáadása
Ha a kérés fejléce alapján tömöríti a Accept-Encodingválaszokat, a válasz tömörítetlen és több tömörített verziója is lehet. Annak érdekében, hogy az ügyfél- és proxygyorsítótárakat arra utasítsa, hogy több verzió is létezik és tárolandó, a Vary fejléc egy Accept-Encoding értékkel lesz hozzáadva. A válaszközvetítési szoftver automatikusan hozzáadja a Vary fejlécet a válasz tömörítésekor.
Note
A .NET referenciaforrásra mutató dokumentációs hivatkozások általában betöltik az adattár alapértelmezett ágát, amely a .NET következő kiadásának aktuális fejlesztését jelöli. Egy adott kiadás címkéjének kiválasztásához használja az Ágak vagy címkék közötti váltás legördülő listát. További információ: A ASP.NET Core-forráskód (dotnet/AspNetCore.Docs #26205) verziócímkéjének kiválasztása.
Köztes szoftver probléma, ha Nginx fordított proxy mögött
Ha az Nginx proxy-z egy kérést, a Accept-Encoding fejléc eltávolításra kerül. A fejléc eltávolítása megakadályozza, hogy a válasz tömörítésére szolgáló middleware tömörítse a választ. További információ: NGINX: Tömörítés és kicsomagolás. Ezt a problémát az Nginx átmenő tömörítésének megoldása (dotnet/aspnetcore#5989) követi nyomon.
Az IIS dinamikus tömörítésének letiltása
A kiszolgáló szintjén konfigurált IIS dinamikus tömörítési modul letiltásához tekintse meg az IIS-modulok letiltását ismertető témakört.
Választömörítés hibaelhárítása
Használjon olyan eszközt, mint a Firefox Browser Developer, amely lehetővé teszi a kérelem fejlécének Accept-Encoding beállítását és a válaszfejlécek, a méret és a törzs tanulmányozása. Alapértelmezés szerint a Választömörítés köztes szoftver tömöríti az alábbi feltételeknek megfelelő válaszokat:
- A
Accept-Encodingfejléc értéke lehetbr,gzip,*vagy egy egyéni kódolás, amely megfelel egy egyéni tömörítési szolgáltatónak. Az érték nem lehet egyenlőidentity-val, és nem lehet 0 (nulla) minőségi értéket (qvalue-t,q) beállítani. - A MIME típust (
Content-Type) be kell állítani, és meg kell egyeznie a MIME típussal, amely a ResponseCompressionOptions-on van beállítva. - A kérelem nem tartalmazhat fejlécet
Content-Range. - A kérésnek nem biztonságos protokollt (http) kell használnia, kivéve, ha a biztonságos protokoll (https) konfigurálva van a Választömörítés köztes szoftver beállításai között. Figyelje meg a fent leírt veszélyeket a biztonságos tartalomtömörítés engedélyezésekor.
Üzembe helyezett Azure-minta
Az Azure-ban üzembe helyezett mintaalkalmazás a következő Program.cs fájllal rendelkezik:
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();
További erőforrások
Note
A .NET referenciaforrásra mutató dokumentációs hivatkozások általában betöltik az adattár alapértelmezett ágát, amely a .NET következő kiadásának aktuális fejlesztését jelöli. Egy adott kiadás címkéjének kiválasztásához használja az Ágak vagy címkék közötti váltás legördülő listát. További információ: A ASP.NET Core-forráskód (dotnet/AspNetCore.Docs #26205) verziócímkéjének kiválasztása.
A hálózati sávszélesség korlátozott erőforrás. A válasz méretének csökkentése általában növeli az alkalmazások válaszkészségét, gyakran drámai módon. A hasznos adatok méretének csökkentésének egyik módja az alkalmazás válaszainak tömörítése.
Mintakód megtekintése vagy letöltése (hogyan töltsd le)
Mikor érdemes használni a Választömörítés köztes szoftvert?
Kiszolgálóalapú választömörítési technológiákat használhat az IIS, az Apache vagy az Nginx rendszerben. A köztes szoftver teljesítménye valószínűleg nem egyezik meg a kiszolgálómodulok teljesítményével. HTTP.sys kiszolgáló és Kestrel kiszolgáló jelenleg nem nyújt beépített tömörítési támogatást.
Választömörítési köztes szoftver használata a következő esetekben:
- A következő kiszolgálóalapú tömörítési technológiák nem használhatók:
- Közvetlen hosztolás:
- HTTP.sys kiszolgáló (korábbi nevén WebListener)
- Kestrel kiszolgáló
Választömörítés
A nem natívan tömörített válaszok általában kihasználhatják a választömörítés előnyeit. A natívan nem tömörített válaszok általában a következők: CSS, JavaScript, HTML, XML és JSON. Nem szabad natívan tömörített objektumokat, például PNG-fájlokat tömöríteni. Ha natívan tömörített választ kísérel meg tovább tömöríteni, a tömörítés feldolgozásához igénybe vett idő valószínűleg beárnyékolja a méret és az átviteli idő kis mértékű csökkentését. Ne tömörítse a 150–1000 bájtnál kisebb fájlokat (a fájl tartalmától és a tömörítés hatékonyságától függően). A kis méretű fájlok tömörítésének többletterhelése a tömörítetlen fájlnál nagyobb tömörített fájlt eredményezhet.
Ha egy ügyfél feldolgozhatja a tömörített tartalmat, az ügyfélnek tájékoztatnia kell a kiszolgálót a képességeiről a Accept-Encoding fejléc kéréssel való elküldésével. Ha egy kiszolgáló tömörített tartalmat küld, a fejlécnek tartalmaznia kell a Content-Encoding tömörített válasz kódolásának módját. A köztes szoftver által támogatott tartalomkódolási megjelölések az alábbi táblázatban láthatók.
Accept-Encoding fejlécértékek |
Köztes szoftver támogatott | Description |
|---|---|---|
br |
Igen (alapértelmezett) | Brotli tömörített adatformátum |
deflate |
No | DEFLATE tömörített adatformátum |
exi |
No | W3C Efficient XML Interchange |
gzip |
Yes | Gzip fájlformátum |
identity |
Yes | "Nincs kódolás" azonosító: A válasz nem kódolható. |
pack200-gzip |
No | Hálózatátviteli formátum Java-archívumokhoz |
* |
Yes | Bármilyen elérhető tartalomkódolás, amely nincs explicit módon kérve |
További információkért lásd az IANA hivatalos tartalomkódolási listáját.
A köztes szoftver lehetővé teszi további tömörítési szolgáltatók hozzáadását az egyéni Accept-Encoding fejlécértékekhez. További információkért lásd alább az egyéni szolgáltatókat .
A köztes szoftver képes reagálni a minőségi érték (qvalue) súlyozására q, amikor az ügyfél elküldi, hogy rangsorolja a tömörítési sémákat. További információ: RFC 9110: Accept-Encoding.
A tömörítési algoritmusok közötti különbség a tömörítés sebessége és a tömörítés hatékonysága között van. A hatékonyság ebben a kontextusban a kimenet tömörítés utáni méretére utal. A legkisebb méret a legoptimálisabb tömörítéssel érhető el.
A tömörített tartalom igénylésében, küldésében, gyorsítótárazásában és fogadásában részt vevő fejléceket az alábbi táblázat ismerteti.
| Header | Role |
|---|---|
Accept-Encoding |
Elküldve az ügyféltől a kiszolgálónak, hogy jelezze az ügyfél számára elfogadható tartalomkódolási sémákat. |
Content-Encoding |
A szerverről az ügyfélhez küldött üzenet jelzi a hasznos teher tartalmának kódolását. |
Content-Length |
Tömörítés esetén a Content-Length fejléc el lesz távolítva, mivel a törzs tartalma megváltozik a válasz tömörítésekor. |
Content-MD5 |
Tömörítés esetén a rendszer eltávolítja a Content-MD5 fejlécet, mivel a törzs tartalma megváltozott, és a kivonat már nem érvényes. |
Content-Type |
A tartalom MIME-típusát adja meg. Minden válasznak meg kell határoznia annak Content-Type. A köztes szoftver ellenőrzi ezt az értéket annak megállapításához, hogy a válasz tömörítése szükséges-e. A köztes szoftver olyan alapértelmezett MIME-típusokat határoz meg, amelyeket kódolhat, de mime-típusokat cserélhet vagy adhat hozzá. |
Vary |
Amikor a kiszolgáló Accept-Encoding értékű fejlécet küld az ügyfélnek vagy a proxynak, a Vary fejléc azt jelezheti, hogy a kérés Accept-Encoding fejlécének értéke alapján variálva kell gyorsítótárazni a válaszokat. A Vary: Accept-Encoding fejlécet használó tartalom visszaadásának eredménye, hogy a tömörített és a tömörítetlen válaszok külön-külön kerülnek gyorsítótárazásra. |
A választömörítési köztes szoftver funkcióinak megismerése a mintaalkalmazással. A minta a következőket szemlélteti:
- Az alkalmazásválaszok tömörítése a Gzip és az egyéni tömörítési szolgáltatók használatával.
- MIME-típus hozzáadása a tömörítéshez használt MIME-típusok alapértelmezett listájához.
Configuration
Az alábbi kód bemutatja, hogyan engedélyezheti a Választömörítés közbenső szoftverét az alapértelmezett MIME-típusok és tömörítési szolgáltatók (Brotli és Gzip) esetében:
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddResponseCompression();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseResponseCompression();
}
}
Notes:
- A `
app.UseResponseCompression`-t kell meghívni bármely válaszokat tömörítő middleware előtt. További információ: ASP.NET Core Middleware. - A kérés fejlécének beállításához és a válaszfejlécek, a méret és a törzs tanulmányozásához használjon olyan eszközt, mint a Fiddler, a
Accept-Encoding.
Küldjön egy kérést a mintaalkalmazásnak a Accept-Encoding fejléc nélkül, és figyelje meg, hogy a válasz nincs tömörítve. A Content-Encoding és Vary fejlécek nincsenek jelen a válaszban.
Küldjön egy kérelmet a mintaalkalmazásnak a Accept-Encoding: br fejléccel (Brotli-tömörítés), és figyelje meg, hogy a válasz tömörítve van. A válasz tartalmazza a Content-Encoding és Vary fejléceket.
Providers
Brotli tömörítési szolgáltató
Használja a BrotliCompressionProvider a válaszok tömörítésére a Brotli tömörített adatformátumával.
Ha nincsenek kifejezetten tömörítési szolgáltatók hozzáadva a CompressionProviderCollection-hoz:
- A Brotli tömörítési szolgáltató alapértelmezés szerint hozzáadódik a tömörítési szolgáltatók tömbjéhez a Gzip tömörítési szolgáltatóval együtt.
- A tömörítés alapértelmezés szerint Brotli-tömörítés, ha az ügyfél támogatja a Brotli tömörített adatformátumot. Ha az ügyfél nem támogatja a Brotli-t, a tömörítés alapértelmezés szerint gzip lesz, ha az ügyfél támogatja a Gzip-tömörítést.
public void ConfigureServices(IServiceCollection services)
{
services.AddResponseCompression();
}
A Brotli-tömörítési szolgáltatót hozzá kell adni, ha bármilyen tömörítési szolgáltatót kifejezetten hozzáadnak.
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" });
});
}
A tömörítési szint beállítása a következővel BrotliCompressionProviderOptions: . A Brotli tömörítési szolgáltató alapértelmezés szerint a leggyorsabb tömörítési szintre (CompressionLevel.Leggyorsabb), amely nem feltétlenül hozza létre a leghatékonyabb tömörítést. Ha a leghatékonyabb tömörítésre van szükség, konfigurálja a köztes szoftvert az optimális tömörítéshez.
| Tömörítési szint | Description |
|---|---|
| CompressionLevel.Leggyorsabb | A tömörítésnek a lehető leggyorsabban kell befejeződnie, még akkor is, ha az eredményül kapott kimenet nincs optimálisan tömörítve. |
| CompressionLevel.NoCompression | Nem szabad tömörítést végezni. |
| CompressionLevel.Optimal | A válaszokat optimálisan tömöríteni kell, még akkor is, ha a tömörítés több időt vesz igénybe. |
public void ConfigureServices(IServiceCollection services)
{
services.AddResponseCompression();
services.Configure<BrotliCompressionProviderOptions>(options =>
{
options.Level = CompressionLevel.Fastest;
});
}
Gzip tömörítési szolgáltató
GzipCompressionProvider A válaszok Gzip-fájlformátummal való tömörítéséhez használja a parancsot.
Ha nincsenek kifejezetten tömörítési szolgáltatók hozzáadva a CompressionProviderCollection-hoz:
- A rendszer alapértelmezés szerint hozzáadja a Gzip tömörítési szolgáltatót a tömörítési szolgáltatók tömbjéhez a Brotli tömörítési szolgáltatóval együtt.
- A tömörítés alapértelmezés szerint Brotli-tömörítés, ha az ügyfél támogatja a Brotli tömörített adatformátumot. Ha az ügyfél nem támogatja a Brotli-t, a tömörítés alapértelmezés szerint gzip lesz, ha az ügyfél támogatja a Gzip-tömörítést.
public void ConfigureServices(IServiceCollection services)
{
services.AddResponseCompression();
}
A Gzip-tömörítési szolgáltatót akkor kell hozzáadni, ha bármely tömörítési szolgáltató explicit módon van hozzáadva:
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" });
});
}
A tömörítési szint beállítása a következővel GzipCompressionProviderOptions: . A Gzip tömörítési szolgáltató alapértelmezés szerint a leggyorsabb tömörítési szintre (CompressionLevel.Leggyorsabb), amely nem feltétlenül hozza létre a leghatékonyabb tömörítést. Ha a leghatékonyabb tömörítésre van szükség, konfigurálja a köztes szoftvert az optimális tömörítéshez.
| Tömörítési szint | Description |
|---|---|
| CompressionLevel.Leggyorsabb | A tömörítésnek a lehető leggyorsabban kell befejeződnie, még akkor is, ha az eredményül kapott kimenet nincs optimálisan tömörítve. |
| CompressionLevel.NoCompression | Nem szabad tömörítést végezni. |
| CompressionLevel.Optimal | A válaszokat optimálisan tömöríteni kell, még akkor is, ha a tömörítés több időt vesz igénybe. |
public void ConfigureServices(IServiceCollection services)
{
services.AddResponseCompression();
services.Configure<GzipCompressionProviderOptions>(options =>
{
options.Level = CompressionLevel.Fastest;
});
}
Egyéni szolgáltatók
Egyéni tömörítési implementációk létrehozása a ICompressionProvider segítségével. Az EncodingName ez ICompressionProvider által előállított tartalomkódolást jelöli. A köztes szoftver ezen információk alapján választja ki a szolgáltatót a kérés fejlécében Accept-Encoding megadott lista alapján.
A mintaalkalmazás használatával az ügyfél elküld egy kérelmet a Accept-Encoding: mycustomcompression fejlécmel együtt. A köztes szoftver az egyéni tömörítési implementációt használja, és egy fejléccel Content-Encoding: mycustomcompression adja vissza a választ. Az ügyfélnek képesnek kell lennie az egyéni kódolás kibontására ahhoz, hogy az egyéni tömörítési implementáció működjön.
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;
}
}
Küldjön egy kérelmet a mintaalkalmazásnak a Accept-Encoding: mycustomcompression fejléccel együtt, és figyelje meg a válaszfejléceket. A válasz tartalmazza a Vary és Content-Encoding fejléceket. A válasz törzse (nem jelenik meg) nincs tömörítve a mintával. A minta osztályában CustomCompressionProvider nincs tömörítési implementáció. A minta azonban megmutatja, hol implementálna egy ilyen tömörítési algoritmust.
MIME-típusok
A köztes szoftver a MIME-típusok alapértelmezett készletét adja meg a tömörítéshez:
application/javascriptapplication/jsonapplication/xmltext/csstext/htmltext/jsontext/plaintext/xml
Cserélje le vagy fűzze hozzá a MIME-típusokat a Választömörítés köztes szoftver beállításaival. Vegye figyelembe, hogy a helyettesítő karakterek MIME-típusai, például text/* nem támogatottak. A mintaalkalmazás hozzáad egy MIME-típust a image/svg+xml-hez, és tömöríti és kiszolgálja az ASP.NET Core szalagcímképet (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" });
});
}
Tömörítés biztonságos protokollal
A biztonságos kapcsolatokon keresztüli tömörített válaszok a beállítással EnableForHttps vezérelhetők, amely alapértelmezés szerint le van tiltva. A dinamikusan létrehozott oldalak tömörítése biztonsági problémákhoz, például támadásokhoz CRIMEBREACH vezethet.
A Vary fejléc hozzáadása
Ha a válaszokat a Accept-Encoding fejléc alapján tömöríti, a válasz több tömörített verziója és egy tömörítetlen verzió is lehet. Annak érdekében, hogy az ügyfél- és proxygyorsítótárakat arra utasítsa, hogy több verzió is létezik és tárolandó, a Vary fejléc egy Accept-Encoding értékkel lesz hozzáadva. A ASP.NET Core 2.0-s vagy újabb verziójában a köztes szoftver automatikusan hozzáadja a Vary fejlécet a válasz tömörítésekor.
Köztes szoftver probléma, ha Nginx fordított proxy mögött
Ha az Nginx proxy-z egy kérést, a Accept-Encoding fejléc eltávolításra kerül. A Accept-Encoding fejléc eltávolítása megakadályozza, hogy a köztes szoftver tömörítse a választ. További információ: NGINX: Tömörítés és kicsomagolás. Ezt a problémát az Nginx átmenő tömörítésének megoldása (dotnet/aspnetcore#5989) követi nyomon.
Az IIS dinamikus tömörítésének használata
Ha egy aktív IIS dinamikus tömörítési modul van konfigurálva a kiszolgáló szintjén, amelyet le szeretne tiltani egy alkalmazáshoz, tiltsa le a modult a web.config fájl hozzáadásával. További információ: Az IIS-modulok letiltása.
Troubleshooting
Használjon olyan eszközt, mint a Fiddler vagy a Firefox Browser Developer, amely lehetővé teszi a kérés fejlécének Accept-Encoding beállítását és a válaszfejlécek, a méret és a törzs vizsgálatát. Alapértelmezés szerint a Választömörítés köztes szoftver tömöríti az alábbi feltételeknek megfelelő válaszokat:
- A
Accept-Encodingfejléc értéke lehetbr,gzip,*, vagy egyéni kódolás, amely megfelel az Ön által létrehozott egyéni tömörítési szolgáltatónak. Az érték nem lehet egyenlőidentity-val, és nem lehet 0 (nulla) minőségi értéket (qvalue-t,q) beállítani. - A MIME típust (
Content-Type) be kell állítani, és meg kell egyeznie a MIME típussal, amely a ResponseCompressionOptions-on van beállítva. - A kérelem nem tartalmazhat fejlécet
Content-Range. - A kérésnek nem biztonságos protokollt (http) kell használnia, kivéve, ha a biztonságos protokoll (https) konfigurálva van a Választömörítés köztes szoftver beállításai között. Figyelje meg a fent leírt veszélyeket a biztonságos tartalomtömörítés engedélyezésekor.