ASP.NET+Angular+Unity应用中Brotli压缩不生效问题排查
排查ASP.NET中Brotli压缩未生效的问题
以下是几个常见的错误点和排查方向:
检查服务注册与中间件顺序
必须先注册Brotli压缩服务,再启用响应压缩中间件,且这个中间件要放在静态文件中间件之前,否则静态资源不会经过压缩处理。正确的配置示例:builder.Services.AddResponseCompression(options => { options.EnableForHttps = true; options.Providers.Add<BrotliCompressionProvider>(); // 一定要包含Unity WebGL资源对应的MIME类型,不然这些文件不会被压缩 options.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat(new[] { "application/octet-stream", // Unity的.bin文件 "application/wasm", // WebGL的.wasm文件 "application/javascript", // 打包后的.js文件 "text/css", "text/html", "application/json" }); }); builder.Services.Configure<BrotliCompressionProviderOptions>(options => { options.Level = CompressionLevel.Optimal; // 可根据需求调整压缩级别 }); var app = builder.Build(); // 响应压缩中间件必须在UseStaticFiles之前 app.UseResponseCompression(); app.UseStaticFiles();验证请求头是否携带Accept-Encoding: br
浏览器只有在请求头里发送Accept-Encoding: br(可同时带gzip),服务器才会返回Brotli压缩的内容。打开浏览器开发者工具的Network标签,查看对应请求的Request Headers,确认是否存在这个字段。如果没有,要么是浏览器不支持Brotli(现在主流浏览器都支持),要么是请求被代理或插件修改了。清除缓存测试
如果之前未压缩的资源已经被浏览器或服务器缓存,新的压缩配置不会立即生效。可以手动清除浏览器缓存,或者临时给静态文件设置禁用缓存的头来测试:app.UseStaticFiles(new StaticFileOptions { OnPrepareResponse = ctx => { ctx.Context.Response.Headers.CacheControl = "no-cache, no-store, must-revalidate"; ctx.Context.Response.Headers.Expires = "-1"; } });确认HTTPS下的压缩开关
如果你的应用跑在HTTPS环境,必须设置options.EnableForHttps = true,否则ASP.NET不会对HTTPS请求启用压缩。排查代理或服务器的压缩设置
要是部署在IIS、Nginx这类反向代理后面,可能代理本身已经开启了压缩,导致ASP.NET的压缩配置不生效。比如IIS的动态/静态压缩如果开启,会优先处理,这时候可以禁用代理的压缩功能,让ASP.NET来处理。
内容的提问来源于stack exchange,提问作者MarkoFire
相关产品推荐
相关产品推荐

