gpt4 book ai didi

c# - 为什么 app.UseResponseCompression() 会增加通过网络传输的响应的大小?

转载 作者:行者123 更新时间:2023-12-01 21:27:45 24 4
gpt4 key购买 nike

我正在尝试使用非常简单的 Asp.Net Core 3.1 应用程序启用响应压缩。我当前的代码:

    public void ConfigureServices(IServiceCollection services)
{
services.Configure<BrotliCompressionProviderOptions>(options => options.Level = CompressionLevel.Optimal);
services.AddResponseCompression(options =>
{
options.Providers.Add<BrotliCompressionProvider>();
});
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseResponseCompression();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapGet("/", async context =>
{
var text = File.ReadAllText(@"D:\huge-response.txt");
await context.Response.WriteAsync(text);
});
});
}

在 huge-response.txt 文件中,我有这个:

qwer qwert qwert qwert qwert
qwer qwert qwert qwert qwert
qwer qwert qwert qwert qwert
qwer qwert qwert qwert qwert
qwer qwert qwert qwert qwert
qwer qwert qwert qwert qwert
....

重复了很多次。该文件为 626 KB。

现在,让我们看看 Chrome 是怎么说的:

enter image description here

奇怪。那么让我们在Fiddler中看看。第一个请求是“正常的”,第二个请求带有 header Accept-Encoding: br

enter image description here

我也试过Gzip压缩,结果基本一样。

这几乎与我预想的相反。这样的文本文件应该是可压缩的,即使是在“最快”的配置下。我希望看到通过网络传输的数据少于 1 KB。

我做错了什么?提前致谢。

最佳答案

app.UseResponseCompression(); 中间件仅适用于呈现 MIME TypesContent-TypeHttpResponse 中,而不是像您正在做的那样将文件流写入 HttpResponse

按照文档,您将看到这一行:

Content-Type:指定内容的 MIME 类型。每个响应都应指定其内容类型。中间件检查此值以确定是否应压缩响应。中间件指定一组它可以编码的默认 MIME 类型,但您可以替换或添加 MIME 类型。

如果你想压缩自定义文件,你需要编写带有Content-Type header 的文件流。然后当这个响应返回到 ResponseCompression 中间件时,它将被压缩。

public async Task Invoke(HttpContext context)
{
context.Response.ContentType = "text/plain";
using (var fs = new FileStream(@"D:\huge-response.txt", FileMode.Open))
{
await fs.CopyToAsync(context.Response.Body);
}
}

关于c# - 为什么 app.UseResponseCompression() 会增加通过网络传输的响应的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62885222/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com