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.
Megjegyzés:
Ez nem a cikk legújabb verziója. Az aktuális kiadásról a cikk .NET 10-es verziójában olvashat.
Figyelmeztetés
A ASP.NET Core ezen verziója már nem támogatott. További információt a .NET és a .NET Core támogatási szabályzatában talál. A jelen cikk .NET 9-es verzióját lásd az aktuális kiadásért .
Dekompressziós köztes szoftver kérése:
- Lehetővé teszi, hogy az API-végpontok tömörített tartalommal fogadják el a kéréseket.
-
Content-EncodingA HTTP-fejléc használatával automatikusan azonosítja és kibontja a tömörített tartalmat tartalmazó kérelmeket. - Nincs szükség kód írására a tömörített kérések kezeléséhez.
Ha egy Content-Encoding kérelem fejlécértéke megegyezik az elérhető dekompressziós szolgáltatók egyikével, a köztes szoftver:
- A megfelelő szolgáltatót használja a HttpRequest.Body egy megfelelő dekompressziós adatfolyamba való burkolásához.
- Eltávolítja a
Content-Encodingfejlécet, jelezve, hogy a kérelem törzse már nincs tömörítve.
A fejlécet nem tartalmazó Content-Encoding kéréseket a kérelem dekompressziós köztes szoftver figyelmen kívül hagyja.
Dekompressziós:
- Akkor fordul elő, ha a kérés törzse beolvasásra kerül. Ez azt jelzi, hogy a dekompresszió a modellkötés végpontján történik. A kérelem törzse nincs azonnal kicsomagolva.
- Ha a tömörített kérelem törzsét a megadotthoz
Content-Encodingérvénytelen tömörített adatokkal próbálja beolvasni, a rendszer kivételt küld. Brotli képes dobni System.InvalidOperationException: Decoder ran into invalid data. és Deflate, valamint GZip képes dobni System.IO.InvalidDataException: The archive entry was compressed using an unsupported compression method.
Ha a köztes szoftver tömörített tartalommal rendelkező kérést tapasztal, de nem tudja kibontani, a rendszer a kérést a folyamat következő meghatalmazottjának továbbítja. Például egy nem támogatott Content-Encoding fejlécértékkel vagy több Content-Encoding fejlécértékkel rendelkező kérelmet a rendszer a folyamat következő meghatalmazottjának ad át.
Konfiguráció
Az alábbi kód a kérés-dekompressziót engedélyezi az AddRequestDecompression(IServiceCollection)UseRequestDecompression típusokhoz, a és Content-Encoding segítségével.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRequestDecompression();
var app = builder.Build();
app.UseRequestDecompression();
app.MapPost("/", (HttpRequest request) => Results.Stream(request.Body));
app.Run();
Alapértelmezett dekompressziós szolgáltatók
A Content-Encoding kérelem dekompressziós köztes szoftver által alapértelmezés szerint támogatott fejlécértékek a következő táblázatban találhatók:
Content-Encoding fejlécértékek |
Description |
|---|---|
br |
Brotli tömörített adatformátum |
deflate |
DEFLATE tömörített adatformátum |
gzip |
Gzip fájlformátum |
Egyéni dekompressziós szolgáltatók
Az egyéni kódolások támogatása egyéni dekompressziós szolgáltatói osztályok létrehozásával adható hozzá, amelyek implementálják IDecompressionProvidera következőt:
public class CustomDecompressionProvider : IDecompressionProvider
{
public Stream GetDecompressionStream(Stream stream)
{
// Perform custom decompression logic here
return stream;
}
}
Az egyéni dekompressziós szolgáltatók a megfelelő RequestDecompressionOptions fejlécértékekkel Content-Encoding együtt vannak regisztrálva:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRequestDecompression(options =>
{
options.DecompressionProviders.Add("custom", new CustomDecompressionProvider());
});
var app = builder.Build();
app.UseRequestDecompression();
app.MapPost("/", (HttpRequest request) => Results.Stream(request.Body));
app.Run();
Kérelmekre vonatkozó méretkorlátok
A zip bombák vagy dekompressziós bombák elleni védelem érdekében:
- A tömörített kérelemtörzs maximális mérete a végpont vagy kiszolgáló által kikényszerített kérelemtörzs méretkorlátjára korlátozódik.
- Ha a tömörített kérelem törzsfolyamából beolvasott bájtok száma meghaladja a korlátot, a rendszer egy InvalidOperationException parancsot küld, amely megakadályozza, hogy további bájtok legyenek beolvasva a streamből.
A végpontok maximális kérésméretét a következő sorrendben állíthatja be:
- IRequestSizeLimitMetadata.MaxRequestBodySize RequestSizeLimitAttribute DisableRequestSizeLimitAttribute például MVC-végpontok esetén.
- A globális kiszolgáló méretkorlátja IHttpMaxRequestBodySizeFeature.MaxRequestBodySize.
MaxRequestBodySizekérésenként felülbírálható a IHttpMaxRequestBodySizeFeature.MaxRequestBodySize használatával, de alapértelmezetten a webkiszolgáló implementációjához konfigurált korlátra áll be.
| Webkiszolgáló implementálása |
MaxRequestBodySize konfigurációja |
|---|---|
| HTTP.sys | HttpSysOptions.MaxRequestBodySize |
| IIS | IISServerOptions.MaxRequestBodySize |
| Kestrel | KestrelServerLimits.MaxRequestBodySize |
Figyelmeztetés
A kérelem törzsméretkorlátjának letiltása biztonsági kockázatot jelent az ellenőrizetlen erőforrás-felhasználás tekintetében, különösen akkor, ha a kérelemtörzs pufferelése folyamatban van. Győződjön meg arról, hogy a szolgáltatásmegtagadási (DoS-) támadások kockázatának csökkentése érdekében biztonsági intézkedések vannak érvényben.