gpt4 book ai didi

asp.net-core - 如何在自宿主环境中在ASP.NET Core中gzip静态内容

转载 作者:行者123 更新时间:2023-12-03 11:39:44 25 4
gpt4 key购买 nike

使用自托管环境发布ASP.NET Core网站时,是否可以提供gzip静态内容?

最佳答案

[编辑2016-11-13]

还有另一种方法来处理压缩文件,代替了步骤2和3。这基本上是相同的想法,但是有一个nuget package可以为您轻松完成所有工作。基本上,它检查.gz.br文件是否与请求的文件匹配。如果存在,则将其与适当的 header 一起返回。它确实验证请求是否具有相应算法的 header 。 Github代码(如果要自己编译)是here

在官方的repository中还存在一个支持该问题的问题,所以我真的希望Microsoft将拥有标准的插件来执行此操作,因为如今使用该插件已经相当普遍且合乎逻辑。

我想我已经找到了提供压缩内容的最优化方法。主要思想是对文件进行预压缩,并且由于默认的ASP.NET 5方法是使用gulp构建js,因此这样做很容易:

1.添加一个gulp步骤以gzip bundle 的库:

gulp.task("buildApplication:js", function () {
return gulp.src(...)
...
.pipe(gzip())
...
});

这将在您的bundles文件夹中生成类似libs.js.gz的内容

2.引用cshtml文件中的libraries.js.gz而不是libraries.js

3.修改静态文件处理程序以修复返回的 header

我们需要添加 Content-Encoding并将 Content-Type从默认的 application/x-gzip更改为 application/javascript,因为并非所有浏览器都足够聪明,可以从 x-gzip正确读取js
app.UseStaticFiles(new StaticFileOptions
{
OnPrepareResponse = context =>
{
if (headers.ContentType.MediaType == "application/x-gzip")
{
if (context.File.Name.EndsWith("js.gz"))
{
headers.ContentType = new MediaTypeHeaderValue("application/javascript");
}
else if (context.File.Name.EndsWith("css.gz"))
{
headers.ContentType = new MediaTypeHeaderValue("text/css");
}

context.Context.Response.Headers.Add("Content-Encoding", "gzip");
}
}
});

现在,没有任何CPU周期可以浪费所有时间来gzip相同的内容,这是提供文件时最好的性能。为了进一步改善它,必须在gzip压缩之前将所有js bundle 和最小化。另一个升级是将相同OnPrepareResponse中的CacheControl最长期限设置为缓存一年,然后在cshtml中添加 asp-append-version="true"

附言如果您将宿主在IIS后面,则可能需要关闭js和css的静态压缩,而不要进行双重压缩,因此我不确定它在这种情况下的行为。

关于asp.net-core - 如何在自宿主环境中在ASP.NET Core中gzip静态内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29156701/

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