Ros*_*mov 6 compression asp.net-core brotli
我在 ASP .NET Core 3.1 中有一个使用 Brotli 静态预压缩的 JS 文件。我希望当对该文件的请求以 .js 结尾时,返回具有相同名称、以 .js.br 结尾的预压缩版本的内容。
我尝试添加一些中间件代码:
app.UseSpaStaticFiles(new StaticFileOptions
{
OnPrepareResponse = async (staticFilesContext) =>
{
IHeaderDictionary headers = staticFilesContext.Context.Response.Headers;
var httpContext = staticFilesContext.Context;
string contentType = headers["Content-Type"];
if (contentType == "application/javascript" && staticFilesContext.File.Name.EndsWith("somehash.chunk.js"))
{
var compressed = @$"ClientApp\build\static\js\{staticFilesContext.File.Name}";
var compressedBytes = await File.ReadAllBytesAsync(compressed);
httpContext.Response.Headers.Add("Content-Encoding", "br");
await httpContext.Response.Body.WriteAsync(compressedBytes);
}
}
});
Run Code Online (Sandbox Code Playgroud)
我尝试了 2 个 npm 库进行预压缩:
使用该代码,我在 Chrome 中得到net::ERR_HTTP2_PROTOCOL_ERROR响应。有时,我在 Visual Studio 2019 中遇到内容长度异常:
响应内容长度不匹配:写入的字节过多
如何正确编写这样的预压缩文件作为响应?我正在进行预压缩,因为我使用的是最慢的 Brotli 11 级,所以动态压缩不适合我。