• asp.net core系列 77 webapi响应压缩


    一.介绍

      背景:目前在开发一个爬虫框架,使用了.net core webapi接口作为爬虫调用入口,在调用 webapi时发现爬虫耗时很短(1秒左右),但客户端获取响应时间却在3~4秒。对于这个问题考虑使用响应压缩技术。

      网络带宽是一种有限资源。 减小响应大小通常可显著提高应用的响应速度。 减小有效负载大小的一种方式是压缩应用的响应。

      在 IIS、Apache 或 Nginx 中是使用基于服务器的响应压缩技术。考虑到动态压缩以及减少服务器的配置,这里介绍.net core中间件来实现响应压缩。

      压缩的事项:

        1)能够压缩的包括:CSS、JavaScript、HTML、XML 和 JSON。

        2)对图片等资产不会压缩,因为压缩的字节只会小幅减少,而被处理压缩所花费的时间所掩盖。

             3)不要压缩小于约 150-1000 字节的文件。

        4)客户端请求时通过Accept-Encoding来指定压缩类型,中间件支持二种常用的压缩类型如下:

       Accept-Encoding: br,gzip
          --br是指Brotli 压缩格式,默认的压缩方式。
          --gzip是指Gzip压缩格式。

       5)中间件为压缩指定一组默认的 MIME 类型:     

          application/javascript
          application/json
          application/xml
          text/css
          text/html
          text/json
          text/plain
          text/xml

      具体介绍看官方文档:https://docs.microsoft.com/zh-cn/aspnet/core/performance/response-compression?view=aspnetcore-5.0

     

    二. 配置压缩中间件

      使用压缩中间件很简单,代码如下:

    复制代码
    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddResponseCompression();
        }
    
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            app.UseResponseCompression();
        }
    }
    复制代码

      

    三.演示

      客户端请求可以是Postman,Fiddler, RestSharp等,下面使用RestSharp来请求爬虫接口获取数据,默认RestSharp请求头带了Accept-Encoding: gzip, deflate

      3.1 未使用响应压缩技术,请求使用fiddler监听

        

     

         1)请求头statistics选项卡中,接口耗时4.822秒

         2)  响应Transformer选项卡中,响应字节572,839

         3)  响应TextView能直接看到明文

      3.2 使用响应压缩技术,请求使用fiddler监听

        

     

         1)请求头statistics选项卡中,接口耗时1.182秒

         2)  响应Transformer选项卡中,响应字节98,930

         3)  响应TextView选项卡中,不能直接看到明文

         4)响应Headers选项卡中,Content-Encoding:gzip

     

         

        

        

      

  • 相关阅读:
    戴森创“新”公开课再度开讲,持续助力打造洁净居家环境 以升级科技守护家庭健康
    将asp.net core程序部署到Linux服务器上(2)---以守护进程方式
    【面试经典150 | 滑动窗口】长度最小的子数组
    EPS功能开发与测试(基于ModelBase实现)
    解决方案:TSINGSEE青犀+智能分析网关助力智慧仓储智能化监管
    DataFrame(11):数据转换——map()函数的使用
    [附源码]计算机毕业设计springboot疫情背景下社区互助服务系统
    二维数组与稀疏数组转换(java)
    编程可以自学吗
    【复】一次流量分析经历
  • 原文地址:https://www.cnblogs.com/MrHSR/p/16334266.html