c# - ASP.NET Core GZIP 编码中间件仅在添加两次后才有效
问题描述
我正在尝试将 GZIP 编码添加到来自 Web 应用程序(.NET Core 2.1)的响应中
我正在关注本指南
根据它,我在 Startup.cs 中添加了以下几行
public void ConfigureServices(IServiceCollection services)
{
services.Configure<GzipCompressionProviderOptions>(options => options.Level = CompressionLevel.Fastest);
services.AddResponseCompression(options =>
{
options.Providers.Add<GzipCompressionProvider>();
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
// In production, the React files will be served from this directory
services.AddSpaStaticFiles(configuration =>
{
configuration.RootPath = "ClientApp/build";
});
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseResponseCompression();
app.UseStaticFiles();
app.UseSpaStaticFiles();
// Other middleware
}
我正在使用 .NET Core 2.1 附带的默认 WebApplication 模板(使用 React)在全新的 WebApplication 上执行此操作。
但是,当我尝试在我的应用程序上查询控制器操作时,不会应用任何编码。
请求标头包括Accept-Encoding: gzip, deflate, br标头,所以我认为请求不是问题。
现在这是奇怪的部分。一旦我添加了两次app.UseResponseCompression();
线,我突然开始得到一些压缩。
app.UseResponseCompression();
这是复制两次
后标题的样子:
如您所见,gzip 标头出现了两次。(响应的大小也相当小,因此 gzip 压缩似乎正在工作)
谁能解释发生了什么以及为什么会这样。以这种方式设置项目的主要问题是,稍后在我的管道中我无法解压缩请求,我想这是由于这里发生的一些魔法。
这是重现该问题的示例 Web 应用程序。(运行应用程序,打开 localhost:5015 并导航到 Fetch Data。 - 观察浏览器 Web 控制台中发生的情况)
解决方案
有两个实例
Content-Encoding: gzip
意味着它已被 gzip 两次,因此您需要解压缩两次才能获得预期的效果。
推荐阅读
- laravel - 如何获取 laravel nova 服务器错误消息并自定义它
- c# - 无法加载文件或程序集 - 添加了计算机名称
- perl - 如何从当前终端的 perl 脚本设置 csh 脚本中的环境变量?
- apache-spark - 如何在 Spark 中获取 hive 表的分区信息
- emscripten - 重写 python 脚本运行器浏览器并使用内联 (./emcc ...) 命令构建单个 emscripten 测试用例
- reactjs - 如何将来自 RTSP url 的 IP 摄像机源显示到 reactjs 应用程序页面上?
- php - 如何使用 wordpress 托管 gatsby?
- linux - 如何在 Amazon Linux AMI 中安装 Postgresql 11?
- qt - 通过 QT 应用程序中的代理订阅 OneSignal 中的用户
- c++ - 在 lua 中加载 C++ 模块时出现“尝试索引字符串值”错误