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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

asp.net core 系列之Performance的 Response compression(响应压缩)

發(fā)布時間:2023/12/4 asp.net 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 asp.net core 系列之Performance的 Response compression(响应压缩) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本文,幫助了解響應(yīng)壓縮的一些知識及用法(大部分翻譯于官網(wǎng),英文水平有限,不準確之處,歡迎指正)。

什么是響應(yīng)壓縮?響應(yīng)壓縮簡單的說就是為了減少網(wǎng)絡(luò)帶寬,而把返回的響應(yīng)壓縮,使之體積縮小,從而加快響應(yīng)的一種技術(shù)(個人理解)

網(wǎng)絡(luò)帶寬是有限的資源。減少響應(yīng)(response)的大小通常可以增加應(yīng)用的響應(yīng)性(即減少響應(yīng)的大小可以加快響應(yīng)的速度),這是很引人注目的(often dramatically).壓縮(壓縮compress)應(yīng)用的響應(yīng)可以減少裝載的大小。

當(dāng)使用響應(yīng)壓縮中間件時(Response Compression Middleware)

在IIS,Apache,Nginx中使用基于服務(wù)端的響應(yīng)壓縮技術(shù)。中間件的執(zhí)行可能和服務(wù)端模塊不匹配。HTTP.sys?和Kestrel server目前沒有提供內(nèi)置的壓縮支持。

什么時候使用Response Compression Middleware:

  • 不能使用下面的服務(wù)端壓縮技術(shù)時:

    • IIS Dynamic Compression module (IIS 動態(tài)壓縮模塊)

    • Apache mod_deflate module (deflate:緊縮?)

    • Nginx Compression and Decompression

  • 部署運行在:

    • HTTP.sys server

    • Kestrel server

響應(yīng)壓縮(Response compression)

通常,任何不能自動壓縮的響應(yīng)都可以從響應(yīng)壓縮中獲益。典型的不能自動壓縮的響應(yīng)包括:CSS, JavaScript, HTML, XML, 和JSON.?你不應(yīng)該壓縮自動壓縮的文件,例如?PNG文件。如果你嘗試更進一步壓縮一個自動壓縮的響應(yīng),那么任何小的額外的縮小和傳送時間都將會顯得黯然失色,等到它處理壓縮, 不要壓縮小于150-1000bytes文件(取決于文件的內(nèi)容和壓縮的效率)。 壓縮小文件開銷可以產(chǎn)生大于未壓縮文件的壓縮文件。

當(dāng)客戶端可以處理壓縮內(nèi)容時,客戶端必須通過發(fā)送請求頭上的Accept-Encoding 通知服務(wù)器它的能力。當(dāng)服務(wù)器發(fā)送壓縮內(nèi)容時,它必須在Content-Encoding?頭中包含壓縮的響應(yīng)是怎么編碼的內(nèi)容。內(nèi)容編碼的指定是通過下表中展示的中間件支持的。

中間件允許你為自定義的Accept-Encoding 的頭上的值增加額外的壓縮提供者,中間件對于質(zhì)量值的反應(yīng)是很熟練的,質(zhì)量值是被客戶端發(fā)送的用來衡量優(yōu)先處理壓縮協(xié)議的。

壓縮算法是受支配于壓縮速度和壓縮效率的一種平衡交易。效率關(guān)系到壓縮之后的大小,最優(yōu)壓縮壓縮出來的就是最小的。

涉及到請求,發(fā)送,緩存,接收壓縮內(nèi)容的頭部在下表中有描述

?

利用sample app?探索響應(yīng)壓縮的功能。這個例子表明:

  • ?應(yīng)用的利用Gzip和自定義壓縮提供者的壓縮

  • 怎樣增加MIME類型到默認的壓縮的MIME類型的列表

Package

為了在項目中包含這個中間件,增加一個到?Microsoft.AspNetCore.App metapackage,?的引用,它包含?Microsoft.AspNetCore.ResponseCompression?包?

Configuration

下面的代碼展示了怎樣允許Response Compression Middleware , 對于默認的MIME類型和壓縮提供者(Brotli?和?Gzip):

注意:

  • App.UseResponseCompression 必須在app.UseMvc之前被調(diào)用

  • 用一個工具(例如Fiddler, Filrebug, Postman)來設(shè)置Accept-Encoding 請求頭,并且研究響應(yīng)頭,大小和body

提交一個不攜帶Acccept-Encoding 頭的請求到示例應(yīng)用,并且觀察到響應(yīng)是未壓縮的。Content-Encoding 和 Vary 頭沒有在響應(yīng)中呈現(xiàn)。

?

提交一個帶Accept-Encoding: br頭的請求到示例應(yīng)用。(Brotli compress)并且觀察響應(yīng)是壓縮的。Content-Encoding?和Vary?在響應(yīng)中呈現(xiàn)了。

Providers(提供者)

Brotli Compression Provider

使用BrotliCompressionProvider來壓縮響應(yīng),使用Brotli compressed data format ( brotli compress 數(shù)據(jù)格式),

如果沒有compression providers(壓縮提供者)被明確的加到 CompressionProviderCollection中:

  • Brotli Compression Provider 默認被加到compression providers的數(shù)組中,和Gzip compression provider.

  • 當(dāng)客戶端支持Brotli compressed data format (Brotli 壓縮數(shù)據(jù)格式)時,默認使用Brotli compression 壓縮. 如果客戶端不支持Brotli , 但是客戶端支持Gzip 壓縮時,會默認使用Gzip

public void ConfigureServices(IServiceCollection services)
{
services.AddResponseCompression();
}

Brotoli Compression Provider必須被添加,當(dāng)任意compression provider 明確的被添加時。

public void ConfigureServices(IServiceCollection services)
{
services.AddResponseCompression(options
=>
{
options.Providers.Add
<BrotliCompressionProvider>();
options.Providers.Add
<GzipCompressionProvider>();
options.Providers.Add
<CustomCompressionProvider>();
options.MimeTypes
=
ResponseCompressionDefaults.MimeTypes.Concat(
new[] { "image/svg+xml" });
});
}

使用BrotliCompressionProviderOptions設(shè)置壓縮級別。Brotli Compression Provider默認使用的是最快的壓縮級別( CompressionLevel.Fastest ),?這種級別可能不會產(chǎn)生最有效率的壓縮。如果最有效率的壓縮被需要時,可以為最佳的壓縮配置中間件

public void ConfigureServices(IServiceCollection services)
{
services.AddResponseCompression();

services.Configure
<BrotliCompressionProviderOptions>(options =>
{
options.Level
= CompressionLevel.Fastest;
});
}

Gzip Compression Provider

使用GzipCompressionProvider來壓縮響應(yīng),用Gzip file format.(用Gzip?文件格式)

如果沒有compression provider被明確的加入到CompressionProviderCollection中:

  • Gzip Compression Provider默認被添加到 壓縮提供者數(shù)組中,并且還有Brotli Compression Provider.

  • 當(dāng)客戶端支持Brotli compressed data format (Brotli?壓縮數(shù)據(jù)格式)時,默認使用Brotli compression?壓縮.?如果客戶端不支持Brotli ,?但是客戶端支持Gzip?壓縮時,會默認使用Gzip?

public void ConfigureServices(IServiceCollection services)
{
services.AddResponseCompression();
}

Gzip Compression Provider 必須被添加,當(dāng)任意壓縮提供者被明確的添加時:

public void ConfigureServices(IServiceCollection services)
{
services.AddResponseCompression(options
=>
{
options.Providers.Add
<BrotliCompressionProvider>();
options.Providers.Add
<GzipCompressionProvider>();
options.Providers.Add
<CustomCompressionProvider>();
options.MimeTypes
=
ResponseCompressionDefaults.MimeTypes.Concat(
new[] { "image/svg+xml" });
});
}

使用GzipCompressionProviderOptions設(shè)置壓縮級別。Gzip Compression Provider默認使用的是最快的壓縮級別( CompressionLevel.Fastest ),?這種級別可能不會產(chǎn)生最有效率的壓縮。如果最有效率的壓縮被需要時,可以為最佳的壓縮配置中間件

public void ConfigureServices(IServiceCollection services)
{
services.AddResponseCompression();

services.Configure
<GzipCompressionProviderOptions>(options =>
{
options.Level
= CompressionLevel.Fastest;
});
}

Custom providers

通過實現(xiàn)ICompressionProvider接口創(chuàng)建自定義的壓縮。EncodingName代表ICompressionProvider生成的內(nèi)容編碼(the content encoding).?中間件使用這個信息來選擇provider,在請求的Accept-Encoding?頭上的列表的基礎(chǔ)上。

在示例項目上,客戶端提交請求,帶有Accept-Encoding: mycustomcompression頭。中間件使用自定義的壓縮實現(xiàn)并且返回帶有Content-Encoding:mycustomcompression頭的響應(yīng)。客戶端必須可以按順序的解壓自定義的編碼( the custom encoding)?,對于一個自定義的壓縮實現(xiàn)的工作。

public void ConfigureServices(IServiceCollection services)
{
services.AddResponseCompression(options
=>
{
options.Providers.Add
<BrotliCompressionProvider>();
options.Providers.Add
<GzipCompressionProvider>();
options.Providers.Add
<CustomCompressionProvider>();
options.MimeTypes
=
ResponseCompressionDefaults.MimeTypes.Concat(
new[] { "image/svg+xml" });
});
}
public class CustomCompressionProvider : ICompressionProvider
{
public string EncodingName => "mycustomcompression";
public bool SupportsFlush => true;

public Stream CreateStream(Stream outputStream)
{
// Create a custom compression stream wrapper here
return outputStream;
}
}

提交一個帶Accept-Encodign:mycustomcompression頭的請求到示例應(yīng)用,并且觀察響應(yīng)頭。響應(yīng)中呈現(xiàn)出了Vary?和Content-Encoding頭。The response body?沒有被壓縮在項目中。在示例項目的CustomCompressionProvider類中沒有一個壓縮實現(xiàn)。示例展示了你在哪里實現(xiàn)這樣一個壓縮算法。

MIME types

這個中間件指定一個默認的用于壓縮的MIME types:

  • application/javascript

  • application/json

  • application/xml

  • text/css

  • text/html

  • text/json

  • text/plain

  • text/xml

在Response Compression Middleware options上替換或者增加MIME types.?注意,帶有通配符的MIME types,?例如?text/*?是不支持的。 示例應(yīng)用中增加了一個MIME type?為?image/svg+xml?并且壓縮并且作用于ASP.NET Core的banner image ( banner,svg ).

public void ConfigureServices(IServiceCollection services)
{
services.AddResponseCompression(options
=>
{
options.Providers.Add
<BrotliCompressionProvider>();
options.Providers.Add
<GzipCompressionProvider>();
options.Providers.Add
<CustomCompressionProvider>();
options.MimeTypes
=
ResponseCompressionDefaults.MimeTypes.Concat(
new[] { "image/svg+xml"
});
});
}

Compression with secure protocol (帶安全協(xié)議的壓縮)

在安全連接上的壓縮響應(yīng)可以使用 EnableForHttps 項(option)來控制,?它默認是被禁用的,?在動態(tài)生成的頁面上面使用壓縮可能會導(dǎo)致安全問題,?例如 ?CRIME?and?BREACH??攻擊。

Adding the Vary header

當(dāng)壓縮響應(yīng)在Accept-Encoding 頭上時,?那是可能會有多個壓縮版本(compressed versions)的響應(yīng)和一個不壓縮的版本。為了指導(dǎo)客戶端和代理(client and proxy)緩存多個存在的版本,并且存儲,Vary?頭是被加到Accept-Encoding?值。 在ASP.NET Core 2.0或者更新的版本,當(dāng)響應(yīng)被壓縮時,中間件自動添加Vary?頭。

Middleware issue when behind an Nginx reverse proxy (Nginx反向代理時中間件的問題)

當(dāng)一個請求被Nginx代理時,Accept-Encoding?頭被移除了, Accept-Encoding頭的移除阻止了中間件壓縮響應(yīng)。更多的信息:NGINX: Compression and Decompression.?

Working with IIS dynamic compression

當(dāng)你有一個激活的IIS動態(tài)壓縮模塊配置在服務(wù)器級別(at the server level),?你可能會想要在一個應(yīng)用上禁止它,那么你可以在web.config文件中禁用它。更多的信息:Disabling IIS modules.??

?本文翻譯于:https://docs.microsoft.com/en-us/aspnet/core/performance/response-compression?view=aspnetcore-2.2

原文地址:https://www.cnblogs.com/Vincent-yuan/p/11026436.html

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

總結(jié)

以上是生活随笔為你收集整理的asp.net core 系列之Performance的 Response compression(响应压缩)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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