为什么 SignalR 需要添加 "application/octet-stream" 类型的响应压缩?

Why does SignalR require adding response compression of type "application/octet-stream"?

Microsoft Docs article 展示了如何在 Blazor 应用中配置 SignalR。那里有一个步骤可以为 application/octet-stream MIME 类型添加响应压缩中间件:

services.AddSignalR();
services.AddControllersWithViews();
services.AddRazorPages();
services.AddResponseCompression(opts =>
{
    opts.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat(
        new[] { "application/octet-stream" });
});

但是,可以注意到在显示 how to configure SignalR for an ASP.NET Core App(使用 JavaScript 库)的文章中跳过了这一步。

我正在尝试为 ASP.NET 核心 MVC 应用程序配置 SignalR,但它位于预呈现的 Razor 组件中,因此我正在按照 Blazor 文章中的说明配置它。我应用的其他部分涉及图片和电子表格的上传和下载,所以我也想知道添加上面的响应压缩是否会干扰这些操作。

有人可以解释一下是否以及为什么需要这一步吗?它有什么显着差异吗? 我想这是为了优化二进制消息在 SignalR 连接上的传输。

Could someone explain if and why this step is required? Does it make any significant difference? I suppose it is to optimize the transmission of binary messages over the SignalR connection.

在 Blazor 中使用 asp.net 核心 SignalR 时不需要响应压缩中间件。在 this tutorial 中,如果您删除 Startup.cs 文件中的 services.AddResponseCompression()app.UseResponseCompression();,SignalR 仍然可以正常工作。

更多详细信息,您可以查看the Response Compression Middleware,它用于动态压缩响应体并降低带宽利用率。