.Net 5中对于http请求的压缩和解压缩(GZip,Brotli)

这篇具有很好参考价值的文章主要介绍了.Net 5中对于http请求的压缩和解压缩(GZip,Brotli)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景:(1)经常会有一些接口返回数据大,导致请求缓慢

(2)在后台请求一些第三方API时,需要解压缩响应数据,再进行处理

解决:可以通过对http请求进行压缩和解压来满足场景需求

1.先了解一下几种不同压缩算法,GZip、Deflate、Brotli

.Net 5中对于http请求的压缩和解压缩(GZip,Brotli)

Gzip: Gzip 基于 DEFLATE 算法,它是 LZ77 和霍夫曼编码的组合,最早用于 UNIX 系统的文件压缩。HTTP 协议上的 Gzip 编码是一种用来进 Web 应用程序性能的技术,Web 服务器和客户端(浏览器)必须共同支持 Gzip,当下主流的浏览器都是支持 Gzip 压缩,包括 IE6、IE7、IE8、IE9、FireFox、Google Chrome、Opera 等;

DEFLATE是同时使用了LZ77算法与哈夫曼编码(Huffman Coding)的一个无损数据压缩算法。

Brotli:Brotli 是基于LZ77算法的一个现代变体、霍夫曼编码和二阶上下文建模。Google软件工程师在2015年9月发布了包含通用无损数据压缩的Brotli增强版本,特别侧重于HTTP压缩。其中的编码器被部分改写以提高压缩比,编码器和解码器都提高了速度,流式API已被改进,增加更多压缩质量级别。

与常见的通用压缩算法不同,Brotli使用一个预定义的120千字节字典。该字典包含超过13000个常用单词、短语和其他子字符串,这些来自一个文本和HTML文档的大型语料库。预定义的算法可以提升较小文件的压缩密度。

使用Brotli替换Deflate来对文本文件压缩通常可以增加20%的压缩密度,而压缩与解压缩速度则大致不变。

程序后台一般都支持这三种压缩算法,而浏览器中需要查看支持的压缩算法,如果不支持,那么API接口返回的压缩数据不能被自动解压。通过上图浏览器http请求中的request headers中的accept-encoding来查看

2.在.Net 5对接口返回数据进行压缩

(1)在ConfigureServices中注册响应压缩服务

    public void ConfigureServices(IServiceCollection services)
        {
            services.Configure<GzipCompressionProviderOptions>(options =>
            {
                options.Level = CompressionLevel.Optimal;//压缩操作应该被优化压缩,即使操作需要更长的时间才能完成。
            })
                .Configure<BrotliCompressionProviderOptions>(options =>
            {
                options.Level = CompressionLevel.Optimal;//压缩操作应该被优化压缩,即使操作需要更长的时间才能完成。
            })
            .AddResponseCompression(options =>
            {
                options.EnableForHttps = true;//是否对https请求压缩
                options.Providers.Add<GzipCompressionProvider>();//响应头中添加gzip
                options.Providers.Add<BrotliCompressionProvider>();//响应头中添加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中启用响应压缩中间件

 app.UseResponseCompression();

(3).这样就配置好了,所有的请求都会压缩后返回,下面看一下响应对比

分别编写一个返回Content和Json的方法:

.Net 5中对于http请求的压缩和解压缩(GZip,Brotli)

未配置压缩的响应:

.Net 5中对于http请求的压缩和解压缩(GZip,Brotli)

压缩后:

.Net 5中对于http请求的压缩和解压缩(GZip,Brotli)

 可以看到,响应数据大小减少很多,响应速度也变快了,而同时,加密数据可以被浏览器自动解压缩

3..Net 5解压缩

用普通WebClient请求第三方接口时,返回数据是乱码:

.Net 5中对于http请求的压缩和解压缩(GZip,Brotli)

接下来启用解压缩:

(1) 新增继承WebClient的类,并重写GetWebRequest方法:

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

(2)用gZipWebClient类进行请求:

   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);
        }

这样响应数据就会自动压缩,再进行后续处理吧

总结:在编写API接口时,要注意接口响应数据大小和速度,尤其针对于大数据量的返回,可以考虑使用gzip或者br来压缩,当然也可以选择其他压缩方式。文章来源地址https://www.toymoban.com/news/detail-447518.html

到了这里,关于.Net 5中对于http请求的压缩和解压缩(GZip,Brotli)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • nginx集成brotli压缩算法

    本文于2017年2月中旬完成,发布在个人博客网站上。 考虑个人博客因某种原因无法修复,于是在博客园安家,之前发布的文章逐步搬迁过来。 Google开源Brotli压缩算法 Brotli是一种全新的数据格式,可以提供比Zopfli高20-26%的压缩比。 在caniuse网站查询当前主流浏览器对brotli算法的

    2024年02月02日
    浏览(20)
  • 微信小程序只支持https请求,如何解决对于一些接口是http请求的?

    微信小程序支持使用 wx.request() 发起 HTTPS 网络请求。 如果后台接口是 HTTP 协议,则需要您在服务端做一个转发,将 HTTPS 请求转发到 HTTP 接口上。这样,就可以在微信小程序中使用 HTTPS 协议访问 HTTP 接口了。 例如,可以在服务端使用 Node.js 做一个简单的转发: 然后,在微信

    2024年02月12日
    浏览(35)
  • Nginx配置压缩和解压缩

    压缩服务器响应,或为不支持压缩的客户端解压缩它们,以提高传递速度并减少服务器开销。 压缩响应通常会显著减小传输数据的大小。但是,由于压缩发生在运行时,因此它也会增加相当大的处理开销,从而对性能产生负面影响。 NGINX 在向客户端发送响应之前执行压缩,

    2024年02月03日
    浏览(23)
  • Python实现压缩和解压缩

    压缩和解压缩是日常常用的操作,不管是windows上图形界面的操作,还是linux上用命令来进行压缩解压缩,总的而言都还是比较方便的。 但用代码来实现就没做过,近期也得实现代码压缩与解压缩操作,所以就抽时间来研究一下。 除了直接的.tar文件,还包括.tar.gz/.tar.bz2/.tar

    2024年03月26日
    浏览(28)
  • 使用Opencv对图像进行压缩和解压缩

      最近在一个项目中需要将工业相机采集到的图像通过jsonrpc进行传输,一开始没进行压缩,传输的速度很慢,相机分辨率是2592×1944,单通道,这么一算一次要传输的数据量大小是2592×1944×1=5,038,848字节,500多万的字节,通过opencv自带 imencode 和 imdecode 两个函数,将图像进行

    2024年02月04日
    浏览(40)
  • Ubuntu下的RAR文件压缩和解压缩方法

    在Ubuntu系统中,默认情况下是无法直接处理RAR文件的,因为RAR是一种闭源的压缩格式。然而,我们可以通过安装一些工具来使Ubuntu支持RAR文件的压缩和解压缩操作。本文将介绍如何在Ubuntu系统上实现RAR文件的压缩和解压缩。 步骤1:安装unrar和rar工具 要在Ubuntu上进行RAR文件的

    2024年02月04日
    浏览(26)
  • Linux之文件打包和解压缩

    任务描述 有时,我们会在 Linux 系统中将多个文件打包成一个单独的文件,通过本关的学习,我们将学会如何在 Linux 系统中将多个文件/目录打包生成一个文件。 本关任务:使用 tar 命令完成文件和目录的打包操作。 相关知识 tar ( tape archive 的简写)工具可完成许多功能,其

    2024年02月09日
    浏览(31)
  • Qt 实现压缩文件、文件夹和解压缩操作zip

    通过Qt自带的库来实现,使用多线程方式,通过信号和槽来触发压缩与解压缩,并将压缩和解压缩结果回传过来。 使用的类: 1、在.pro文件中添加模块gui-private 若未cmake工程,需要在CMakeList.txt中添加 待验证: 1、中文路径,文件名含有中文 2、隐藏文件夹,.dir和…dir,例如:

    2024年02月14日
    浏览(32)
  • nginx开启Gzip压缩,Vue性能优化之使用gzip压缩打包

    不管是vue项目还是react项目在使用webpack打包之后都会生成一个动辄一两兆甚至更大的js文件,在某些情况下严重影响项目性能,打开页面的时候白屏时间会很长,本文将介绍如何使用gzip压缩打包,主要是nginx部署的配置,非常重要,我查阅了很多文章基本都没用说清楚甚至错

    2024年02月02日
    浏览(31)
  • Java使用Stream API对于数据列表经常处理

    先提供一些简单到复杂的常见例子,您可以根据这些例子进行进一步的开发和学习: 查询表中所有数据: 根据条件查询单个结果: 根据条件查询多个结果,并取前几条: 对查询结果进行排序: 过滤符合条件的结果: 对查询结果进行分页: 对查询结果进行统计: 对查询结

    2024年02月13日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包