前言
压缩能够大大的下降咱们Web服务器的响应速度,压缩从而提升咱们网页的加载速度,以及节省必定的带宽.javascript
什么时候使用相应压缩中间件
在IIS,Apache,Nginx中使用基于服务端的响应压缩技术。中间件的执行可能和服务端模块不匹配。HTTP.sys 和Kestrel server目前没有提供内置的压缩支持。css
IIS 动态压缩模块html
apache的GZIP压缩java
Nginx 压缩算法
如何添加MIME
中间件为压缩指定了一组默认的 MIME 类型:apache
public void ConfigureServices(IServiceCollection services) { services.AddResponseCompression(); services.AddRazorPages(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseResponseCompression(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapRazorPages(); }); }
默认是采用Brotli压缩json
Brotli is a generic-purpose lossless compression algorithm that compresses data using a combination of a modern variant of the LZ77 algorithm, Huffman coding and 2nd order context modeling, with a compression ratio comparable to the best currently available general-purpose compression methods. It is similar in speed with deflate but offers more dense compression.segmentfault
Brotli 是基于LZ77算法的一个现代变体、霍夫曼编码和二阶上下文建模。Google软件工程师在2015年9月发布了包含通用无损数据压缩的Brotli加强版本,特别侧重于HTTP压缩。其中的编码器被部分改写以提升压缩比,编码器和解码器都提升了速度,流式API已被改进,增长更多压缩质量级别。数组
与常见的通用压缩算法不一样,Brotli使用一个预约义的120千字节字典。该字典包含超过13000个经常使用单词、短语和其余子字符串,这些来自一个文本和HTML文档的大型语料库。预约义的算法能够提高较小文件的压缩密度。安全
摘自:https://segmentfault.com/a/1190000009383543
使用压缩的好处就是节省网络流量,压缩资源文件。可是消耗一点CPU性能.
public void ConfigureServices(IServiceCollection services) { services.AddResponseCompression(options=> { options.Providers.Add<BrotliCompressionProvider>(); options.Providers.Add<GzipCompressionProvider>(); }); services.AddRazorPages(); }
有些MIME类型是须要咱们本身为他将其加入压缩类型中的,咱们能够从图中看到目前有一些未被压缩,那么咱们能够将他手动增长一下类型.
public void ConfigureServices(IServiceCollection services) { services.AddResponseCompression(options=> { options.Providers.Add<BrotliCompressionProvider>(); options.Providers.Add<GzipCompressionProvider>(); options.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat( new[] { "image/x-icon" }); }); services.AddRazorPages(); }
如何配置压缩级别
压缩级别 | 描述 |
---|---|
CompressionLevel.Fastest | 压缩应该尽快完成, 即便生成的输出未以最佳方式压缩。 |
CompressionLevel.NoCompression | 不该执行压缩。 |
CompressionLevel.Optimal | 即便压缩须要更长的时间, 也应以最佳方式压缩响应。 |
public void ConfigureServices(IServiceCollection services) { services.AddResponseCompression(); services.Configure<GzipCompressionProviderOptions>(options => { options.Level = CompressionLevel.Fastest; }); }) }
安全协议压缩
可使用EnableForHttps选项控制安全链接上的压缩响应,该选项默认状况下处于禁用状态。对动态生成的页面使用压缩可能会致使安全问题,例如CRIME和BREACH攻击。
public void ConfigureServices(IServiceCollection services) { services.AddResponseCompression(options=> { options.Providers.Add<BrotliCompressionProvider>(); options.Providers.Add<GzipCompressionProvider>(); options.EnableForHttps = true; options.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat( new[] { "image/x-icon" }); }); services.AddRazorPages(); }
dotnet济南俱乐部组建中有兴趣的小伙伴能够加入QQ群:743523033