uniapp开启数据压缩的坑-SpringBoot-gzip

发布于:2024-08-10 ⋅ 阅读:(107) ⋅ 点赞:(0)

1、服务器配置

服务端开启的数据压缩配置

server:
  port: ${port:8881}
  servlet:
    # 应用上下文路径
    context-path: /orderserver
  undertow:
    threads:
      io: 4
      worker: 500
    buffer-size: 2048
  # 开启Gzip压缩,
  compression:
    # 开启压缩
    enabled: true
    # 对json格式内容进行压缩
    mime-types: application/json
    # 响应体超过5KB需要进行压缩---默认只压缩超过2KB的数据
    min-response-size: 5120

2、uniapp的请求公共函数请求头

	let HEADER= {
		"Accept-Encoding": "gzip", 
        "content-type":
          method == "POST"
            ? "application/json;charset=UTF-8"
            : "application/json",
        token: uni.getStorageSync("userInfo").token
      }

3、压缩数据无法解析

在使用postman和jmeter进行测试的时候,都需要在请求头上添加"Accept-Encoding": "gzip",数据解压无误,数据都能完成自动解压,但是在uniapp的请求头上添加这个请求头,请求内容中的data是Unicode和其他编码的一个混合体,可以看到内容编码是gzip,当时

4、解压

当时只以为需要进行手动解压,但是使用pako进行gizp解压无效,还是更换axios请求框架需要更换请求适配器,无法完成解压

5、解决方案

去掉请求头"Accept-Encoding": "gzip",当时只以为不加这个请求头,服务端的响应数据不是压缩的,但是在服务端打印请求头的时候,发现前端请求头中自带"Accept-Encoding": "gzip",因此uniapp的请求的底层实现会自动解压

6、总结

1、uniapp的请求中的"Accept-Encoding": "gzip"为请求自带配置,不可修改与覆盖

2、既然uniapp的原生请求头中的"Accept-Encoding": "gzip"不可修改与覆盖,且请求头中的数据压缩格式只有 gzip,那么服务器的gzip, deflate, br这个三种压缩格式应该是只支持gzip一种,另外几种大概率不支持

3、拓展:服务器 数据压缩可以将响应json数据压缩成字符,放在响应的data中,客户端需要根据后端的压缩方式进行对应解压,此方案也可以用于客户端对请求数据进行压缩,服务器根据对应压缩方案实现一个对应的解压工具进行解压


网站公告

今日签到

点亮在社区的每一天
去签到