国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

.Net 5中對(duì)于http請(qǐng)求的壓縮和解壓縮(GZip,Brotli)

這篇具有很好參考價(jià)值的文章主要介紹了.Net 5中對(duì)于http請(qǐng)求的壓縮和解壓縮(GZip,Brotli)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

背景:(1)經(jīng)常會(huì)有一些接口返回?cái)?shù)據(jù)大,導(dǎo)致請(qǐng)求緩慢

(2)在后臺(tái)請(qǐng)求一些第三方API時(shí),需要解壓縮響應(yīng)數(shù)據(jù),再進(jìn)行處理

解決:可以通過(guò)對(duì)http請(qǐng)求進(jìn)行壓縮和解壓來(lái)滿足場(chǎng)景需求

1.先了解一下幾種不同壓縮算法,GZip、Deflate、Brotli

.Net 5中對(duì)于http請(qǐng)求的壓縮和解壓縮(GZip,Brotli)

Gzip: Gzip 基于 DEFLATE 算法,它是 LZ77 和霍夫曼編碼的組合,最早用于 UNIX 系統(tǒng)的文件壓縮。HTTP 協(xié)議上的 Gzip 編碼是一種用來(lái)進(jìn) Web 應(yīng)用程序性能的技術(shù),Web 服務(wù)器和客戶端(瀏覽器)必須共同支持 Gzip,當(dāng)下主流的瀏覽器都是支持 Gzip 壓縮,包括 IE6、IE7、IE8、IE9、FireFox、Google Chrome、Opera 等;

DEFLATE是同時(shí)使用了LZ77算法與哈夫曼編碼(Huffman Coding)的一個(gè)無(wú)損數(shù)據(jù)壓縮算法。

Brotli:Brotli 是基于LZ77算法的一個(gè)現(xiàn)代變體、霍夫曼編碼和二階上下文建模。Google軟件工程師在2015年9月發(fā)布了包含通用無(wú)損數(shù)據(jù)壓縮的Brotli增強(qiáng)版本,特別側(cè)重于HTTP壓縮。其中的編碼器被部分改寫(xiě)以提高壓縮比,編碼器和解碼器都提高了速度,流式API已被改進(jìn),增加更多壓縮質(zhì)量級(jí)別。

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

使用Brotli替換Deflate來(lái)對(duì)文本文件壓縮通??梢栽黾?0%的壓縮密度,而壓縮與解壓縮速度則大致不變。

程序后臺(tái)一般都支持這三種壓縮算法,而瀏覽器中需要查看支持的壓縮算法,如果不支持,那么API接口返回的壓縮數(shù)據(jù)不能被自動(dòng)解壓。通過(guò)上圖瀏覽器http請(qǐng)求中的request headers中的accept-encoding來(lái)查看

2.在.Net 5對(duì)接口返回?cái)?shù)據(jù)進(jìn)行壓縮

(1)在ConfigureServices中注冊(cè)響應(yīng)壓縮服務(wù)

    public void ConfigureServices(IServiceCollection services)
        {
            services.Configure<GzipCompressionProviderOptions>(options =>
            {
                options.Level = CompressionLevel.Optimal;//壓縮操作應(yīng)該被優(yōu)化壓縮,即使操作需要更長(zhǎng)的時(shí)間才能完成。
            })
                .Configure<BrotliCompressionProviderOptions>(options =>
            {
                options.Level = CompressionLevel.Optimal;//壓縮操作應(yīng)該被優(yōu)化壓縮,即使操作需要更長(zhǎng)的時(shí)間才能完成。
            })
            .AddResponseCompression(options =>
            {
                options.EnableForHttps = true;//是否對(duì)https請(qǐng)求壓縮
                options.Providers.Add<GzipCompressionProvider>();//響應(yīng)頭中添加gzip
                options.Providers.Add<BrotliCompressionProvider>();//響應(yīng)頭中添加brotli
                options.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat(new[]
                {
                    "text/html; charset=utf-8",
                    "application/xhtml+xml",
                    "application/atom+xml",
                    "image/svg+xml"
                });
            });
            services.AddControllers();
        }

(2).在Configure中啟用響應(yīng)壓縮中間件

 app.UseResponseCompression();

(3).這樣就配置好了,所有的請(qǐng)求都會(huì)壓縮后返回,下面看一下響應(yīng)對(duì)比

分別編寫(xiě)一個(gè)返回Content和Json的方法:

.Net 5中對(duì)于http請(qǐng)求的壓縮和解壓縮(GZip,Brotli)

未配置壓縮的響應(yīng):

.Net 5中對(duì)于http請(qǐng)求的壓縮和解壓縮(GZip,Brotli)

壓縮后:

.Net 5中對(duì)于http請(qǐng)求的壓縮和解壓縮(GZip,Brotli)

?可以看到,響應(yīng)數(shù)據(jù)大小減少很多,響應(yīng)速度也變快了,而同時(shí),加密數(shù)據(jù)可以被瀏覽器自動(dòng)解壓縮

3..Net 5解壓縮

用普通WebClient請(qǐng)求第三方接口時(shí),返回?cái)?shù)據(jù)是亂碼:

.Net 5中對(duì)于http請(qǐng)求的壓縮和解壓縮(GZip,Brotli)

接下來(lái)啟用解壓縮:

(1)?新增繼承WebClient的類,并重寫(xiě)GetWebRequest方法:

    public class gZipWebClient : WebClient
    {
        protected override WebRequest GetWebRequest(Uri address)
        {
            HttpWebRequest request = base.GetWebRequest(address) as HttpWebRequest;
            //自動(dòng)gzip解壓
            request.AutomaticDecompression = DecompressionMethods.GZip;
            return request;
        }
    }

(2)用gZipWebClient類進(jìn)行請(qǐng)求:

   public IActionResult DepressJson()
        {
            gZipWebClient wc = new gZipWebClient();
            wc.Encoding = System.Text.Encoding.UTF8;
            string url1 = "https://xxx.com/data";
            string ret1 = wc.DownloadString(url1);

            return Content(ret1);
        }

這樣響應(yīng)數(shù)據(jù)就會(huì)自動(dòng)壓縮,再進(jìn)行后續(xù)處理吧

總結(jié):在編寫(xiě)API接口時(shí),要注意接口響應(yīng)數(shù)據(jù)大小和速度,尤其針對(duì)于大數(shù)據(jù)量的返回,可以考慮使用gzip或者br來(lái)壓縮,當(dāng)然也可以選擇其他壓縮方式。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-447518.html

到了這里,關(guān)于.Net 5中對(duì)于http請(qǐng)求的壓縮和解壓縮(GZip,Brotli)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • nginx集成brotli壓縮算法

    本文于2017年2月中旬完成,發(fā)布在個(gè)人博客網(wǎng)站上。 考慮個(gè)人博客因某種原因無(wú)法修復(fù),于是在博客園安家,之前發(fā)布的文章逐步搬遷過(guò)來(lái)。 Google開(kāi)源Brotli壓縮算法 Brotli是一種全新的數(shù)據(jù)格式,可以提供比Zopfli高20-26%的壓縮比。 在caniuse網(wǎng)站查詢當(dāng)前主流瀏覽器對(duì)brotli算法的

    2024年02月02日
    瀏覽(17)
  • 微信小程序只支持https請(qǐng)求,如何解決對(duì)于一些接口是http請(qǐng)求的?

    微信小程序支持使用 wx.request() 發(fā)起 HTTPS 網(wǎng)絡(luò)請(qǐng)求。 如果后臺(tái)接口是 HTTP 協(xié)議,則需要您在服務(wù)端做一個(gè)轉(zhuǎn)發(fā),將 HTTPS 請(qǐng)求轉(zhuǎn)發(fā)到 HTTP 接口上。這樣,就可以在微信小程序中使用 HTTPS 協(xié)議訪問(wèn) HTTP 接口了。 例如,可以在服務(wù)端使用 Node.js 做一個(gè)簡(jiǎn)單的轉(zhuǎn)發(fā): 然后,在微信

    2024年02月12日
    瀏覽(29)
  • Nginx配置壓縮和解壓縮

    壓縮服務(wù)器響應(yīng),或?yàn)椴恢С謮嚎s的客戶端解壓縮它們,以提高傳遞速度并減少服務(wù)器開(kāi)銷。 壓縮響應(yīng)通常會(huì)顯著減小傳輸數(shù)據(jù)的大小。但是,由于壓縮發(fā)生在運(yùn)行時(shí),因此它也會(huì)增加相當(dāng)大的處理開(kāi)銷,從而對(duì)性能產(chǎn)生負(fù)面影響。 NGINX 在向客戶端發(fā)送響應(yīng)之前執(zhí)行壓縮,

    2024年02月03日
    瀏覽(32)
  • Python實(shí)現(xiàn)壓縮和解壓縮

    壓縮和解壓縮是日常常用的操作,不管是windows上圖形界面的操作,還是linux上用命令來(lái)進(jìn)行壓縮解壓縮,總的而言都還是比較方便的。 但用代碼來(lái)實(shí)現(xiàn)就沒(méi)做過(guò),近期也得實(shí)現(xiàn)代碼壓縮與解壓縮操作,所以就抽時(shí)間來(lái)研究一下。 除了直接的.tar文件,還包括.tar.gz/.tar.bz2/.tar

    2024年03月26日
    瀏覽(21)
  • 使用Opencv對(duì)圖像進(jìn)行壓縮和解壓縮

    ??最近在一個(gè)項(xiàng)目中需要將工業(yè)相機(jī)采集到的圖像通過(guò)jsonrpc進(jìn)行傳輸,一開(kāi)始沒(méi)進(jìn)行壓縮,傳輸?shù)乃俣群苈?,相機(jī)分辨率是2592×1944,單通道,這么一算一次要傳輸?shù)臄?shù)據(jù)量大小是2592×1944×1=5,038,848字節(jié),500多萬(wàn)的字節(jié),通過(guò)opencv自帶 imencode 和 imdecode 兩個(gè)函數(shù),將圖像進(jìn)行

    2024年02月04日
    瀏覽(17)
  • Ubuntu下的RAR文件壓縮和解壓縮方法

    在Ubuntu系統(tǒng)中,默認(rèn)情況下是無(wú)法直接處理RAR文件的,因?yàn)镽AR是一種閉源的壓縮格式。然而,我們可以通過(guò)安裝一些工具來(lái)使Ubuntu支持RAR文件的壓縮和解壓縮操作。本文將介紹如何在Ubuntu系統(tǒng)上實(shí)現(xiàn)RAR文件的壓縮和解壓縮。 步驟1:安裝unrar和rar工具 要在Ubuntu上進(jìn)行RAR文件的

    2024年02月04日
    瀏覽(15)
  • Linux之文件打包和解壓縮

    Linux之文件打包和解壓縮

    任務(wù)描述 有時(shí),我們會(huì)在 Linux 系統(tǒng)中將多個(gè)文件打包成一個(gè)單獨(dú)的文件,通過(guò)本關(guān)的學(xué)習(xí),我們將學(xué)會(huì)如何在 Linux 系統(tǒng)中將多個(gè)文件/目錄打包生成一個(gè)文件。 本關(guān)任務(wù):使用 tar 命令完成文件和目錄的打包操作。 相關(guān)知識(shí) tar ( tape archive 的簡(jiǎn)寫(xiě))工具可完成許多功能,其

    2024年02月09日
    瀏覽(18)
  • Qt 實(shí)現(xiàn)壓縮文件、文件夾和解壓縮操作zip

    通過(guò)Qt自帶的庫(kù)來(lái)實(shí)現(xiàn),使用多線程方式,通過(guò)信號(hào)和槽來(lái)觸發(fā)壓縮與解壓縮,并將壓縮和解壓縮結(jié)果回傳過(guò)來(lái)。 使用的類: 1、在.pro文件中添加模塊gui-private 若未cmake工程,需要在CMakeList.txt中添加 待驗(yàn)證: 1、中文路徑,文件名含有中文 2、隱藏文件夾,.dir和…dir,例如:

    2024年02月14日
    瀏覽(31)
  • nginx開(kāi)啟Gzip壓縮,Vue性能優(yōu)化之使用gzip壓縮打包

    nginx開(kāi)啟Gzip壓縮,Vue性能優(yōu)化之使用gzip壓縮打包

    不管是vue項(xiàng)目還是react項(xiàng)目在使用webpack打包之后都會(huì)生成一個(gè)動(dòng)輒一兩兆甚至更大的js文件,在某些情況下嚴(yán)重影響項(xiàng)目性能,打開(kāi)頁(yè)面的時(shí)候白屏?xí)r間會(huì)很長(zhǎng),本文將介紹如何使用gzip壓縮打包,主要是nginx部署的配置,非常重要,我查閱了很多文章基本都沒(méi)用說(shuō)清楚甚至錯(cuò)

    2024年02月02日
    瀏覽(21)
  • Java使用Stream API對(duì)于數(shù)據(jù)列表經(jīng)常處理

    Java使用Stream API對(duì)于數(shù)據(jù)列表經(jīng)常處理

    先提供一些簡(jiǎn)單到復(fù)雜的常見(jiàn)例子,您可以根據(jù)這些例子進(jìn)行進(jìn)一步的開(kāi)發(fā)和學(xué)習(xí): 查詢表中所有數(shù)據(jù): 根據(jù)條件查詢單個(gè)結(jié)果: 根據(jù)條件查詢多個(gè)結(jié)果,并取前幾條: 對(duì)查詢結(jié)果進(jìn)行排序: 過(guò)濾符合條件的結(jié)果: 對(duì)查詢結(jié)果進(jìn)行分頁(yè): 對(duì)查詢結(jié)果進(jìn)行統(tǒng)計(jì): 對(duì)查詢結(jié)

    2024年02月13日
    瀏覽(26)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包