日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

在ASP.NET Core中使用brotli压缩

發(fā)布時間:2023/12/4 asp.net 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在ASP.NET Core中使用brotli压缩 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Brotli是一種全新的數(shù)據(jù)格式,可以提供比Zopfli高20-26%的壓縮比。據(jù)谷歌研究,Brotli壓縮速度同zlib的Deflate實現(xiàn)大致相同,而在Canterbury語料庫上的壓縮密度比LZMA和bzip2略大。?鏈接:Google開源Brotli壓縮算法?微軟使用了一種基于谷歌提供的C代碼的實現(xiàn),向.NET Core 2.1添加了Brotli壓縮支持。由于Brotli得到了許多Web瀏覽器和Web服務器的廣泛支持,所以.NET Core提供對這項技術的支持是非常有用的。

什么是 Brotli 壓縮算法

Brotli最初發(fā)布于2015年,用于網(wǎng)絡字體的離線壓縮。Google軟件工程師在2015年9月發(fā)布了包含通用無損數(shù)據(jù)壓縮的Brotli增強版本,特別側(cè)重于HTTP壓縮。其中的編碼器被部分改寫以提高壓縮比,編碼器和解碼器都提高了速度,流式API已被改進,增加更多壓縮質(zhì)量級別。新版本還展現(xiàn)了跨平臺的性能改進,以及減少解碼所需的內(nèi)存。

與常見的通用壓縮算法不同,Brotli使用一個預定義的120千字節(jié)字典。該字典包含超過13000個常用單詞、短語和其他子字符串,這些來自一個文本和HTML文檔的大型語料庫。預定義的算法可以提升較小文件的壓縮密度。

使用brotli替換deflate來對文本文件壓縮通常可以增加20%的壓縮密度,而壓縮與解壓縮速度則大致不變。使用Brotli進行流壓縮的內(nèi)容編碼類型已被提議使用“br”。

摘自:https://zh.wikipedia.org/wiki/Brotli

另附 Brotli 算法和其他算法的性能比較:

  • https://cran.r-project.org/web/packages/brotli/vignettes/benchmarks.html

  • https://hacks.mozilla.org/2015/11/better-than-gzip-compression-with-brotli/

大部分瀏覽器都已經(jīng)支持Brotli壓縮

所以,除了gzip之外,該是支持Brotli的時候了!有關 ASP.NET 核心響應壓縮中間件:https://docs.microsoft.com/zh-cn/aspnet/core/performance/response-compression?view=aspnetcore-2.1&tabs=aspnetcore2x, 這篇文章中已經(jīng)介紹了在asp.net core中使用 GzipCompressionProvider,同時也介紹了自定義提供程序來支持Brotli 壓縮,微軟.net團隊博客有篇文章詳細的介紹了Brotli?https://blogs.msdn.microsoft.com/dotnet/2017/07/27/introducing-support-for-brotli-compression/。

在 netcoreapp2.1 包里面包含了 System.IO.Compression.Brotli

響應壓縮中間件查看請求的頭部并檢查壓縮提供者是否可以處理其中一種可接受的編碼。默認情況下,只支持gzip算法。通過實施自定義壓縮提供程序來支持自定義編碼。自定義提供程序必須實現(xiàn)該ICompressionProvider接口。該接口包含一個具有編碼名稱的屬性以及一個創(chuàng)建壓縮流的方法。System.IO.Compression.Brotli.dll 提供了一個BrotliStream類,所以實現(xiàn)非常簡單:

public class BrotliCompressionProvider : ICompressionProvider
???? {
???????? public string EncodingName => "br";
???????? public bool SupportsFlush => true;

??????? public Stream CreateStream(Stream outputStream)
???????? {
??????????????? return new BrotliStream(outputStream,CompressionLevel.Fastest);
???????? }
???? }

客戶端提交的請求Accept-Encoding: br?標頭。 該中間件使用自定義壓縮的實現(xiàn),并返回響應,其中Content-Encoding: br?標頭。 客戶端必須能夠解壓縮順序用于工作的自定義壓縮實現(xiàn)的自定義編碼brotli 。

Vary和Content-Encoding標頭會顯示在響應。當壓縮響應基于Accept-Encoding標頭,有可能的多個壓縮的版本響應和未壓縮的版本。 若要指示客戶端和代理服務器緩存,多個版本存在,并且應存儲Vary標頭添加與Accept-Encoding值。?

// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
???? services.AddResponseCompression(options =>
???? {??????????
???????? options.Providers.Add<BrotliCompressionProvider>();
???????? options.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat(new[] { "image/svg+xml" });
???? });

}

public void Configure(IApplicationBuilder app) {app.UseResponseCompression();app.UseStaticFiles();app.UseMvcWithDefaultRoute(); }

原文地址: https://www.cnblogs.com/shanyou/p/9154816.html


.NET社區(qū)新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com

總結(jié)

以上是生活随笔為你收集整理的在ASP.NET Core中使用brotli压缩的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。