用pako.js压缩字符串,如何在后端用java解开?

news/2024/7/7 20:44:11

背景:项目链路为腾讯clb->Ingress(nginx)->项目服务,腾讯的Ingress对header请求头最大值为256K,无法加大,由于业务配置数据增加,此问题诟病已久,于是想着压缩打请求头数据后再请求,从而解决请求头大的问题

前端为vue项目

注意:pako的版本必须为1.0.3,否则后端解不开,应该是大于此版本pako做过代码调整,并不兼容历史版本(不要问怎么知道的,我都不知道解了多少,一直提示不是gzip格式,我让前端反解析,前端发现也解不出来,后续我发现是版本问题,坑!)

代码

if (config.data?.headerContentUse) {
                config.headers['Content-Encoding'] = 'gzip'
                if (ls.get('oldDetailData')) {
                    let gzip = pako.gzip(encodeURIComponent(JSON.stringify(ls.get('oldDetailData'))), { to: "string" });
                    const base64 = btoa(gzip);
                    config.headers['oldContent'] = base64
                }
                let gzip2 = pako.gzip(encodeURIComponent(JSON.stringify(data)), { to: "string" });
                const base642 = btoa(gzip2);
                config.headers['newContent'] = base642

            }

后端为java项目

代码

          if(StringUtils.isNotBlank(oldContent)){
                    oldContent = this.unZip(oldContent);
                }
                if(StringUtils.isNotBlank(newContent)){
                    newContent = this.unZip(newContent);
                }
    public String unZip(String content) throws IOException {
        byte[] gzipBytes = Base64.getDecoder().decode(content);
        // 使用GZIPInputStream解压缩
        ByteArrayInputStream bais = new ByteArrayInputStream(gzipBytes);
        GZIPInputStream gzis = new GZIPInputStream(bais);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();

        byte[] buffer = new byte[1024];
        int len;
        while ((len = gzis.read(buffer)) > 0) {
            baos.write(buffer, 0, len);
        }
        gzis.close();
        baos.close();
        // 解码URL编码
        return URLDecoder.decode(baos.toString(), "UTF-8");
    }


http://lihuaxi.xjx100.cn/news/2100981.html

相关文章

一套为中小电商企业构建的、开源的、简单实用的ERP系统需要接入的电商API接口以及实现的功能模块分析

一、项目简介 电商ERP系统为中小电商企业构建的一套简单实用的电商系统,本项目采用Java SpringBootVue2前后端分离开发。 支持供应商一件代发和仓库发货两种发货方式,主体流程覆盖采购、网店订单处理、供应商一件代发、仓库发货、网店售后、仓库出入库、…

[C++] 实现Union

前几天学了replacement new写的小玩意 #include <iostream> #include <functional> #include <string>// 可能因为const char*类型的缘故 // 用const ArgsT&&...会报错// 测试用类 struct Test {Test(){std::cout << "constructed"…

Unity2019.2.x 导出apk 安装到安卓Android12+及以上的系统版本 安装出现-108 安装包似乎无效的解决办法

Unity2019.2.x 导出apk 安装到安卓Android12及以上的系统版本 安装出现-108 安装包似乎无效的解决办法 导出AndroidStudio工程后 需要设置 build.gradle文件 // GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAINbuildscript {repositor…

【洛谷 P8602】[蓝桥杯 2013 省 A] 大臣的旅费 题解(图论+深度优先搜索+树的直径+链式前向星)

[蓝桥杯 2013 省 A] 大臣的旅费 题目描述 很久以前&#xff0c;T 王国空前繁荣。为了更好地管理国家&#xff0c;王国修建了大量的快速路&#xff0c;用于连接首都和王国内的各大城市。 为节省经费&#xff0c;T 国的大臣们经过思考&#xff0c;制定了一套优秀的修建方案&am…

sqllab第二十六关通关笔记

知识点&#xff1a; 空格替换 %09 %0a %0b %0c %0d %a0 (%2b)or替换&#xff1a;|| ||是不需要空格区分的and替换&#xff1a;&& &&同样不需要空格区分的双写绕过&#xff0c;但是绕过后需要和内容进行空格区分的&#xff0c;要不然不发挥作用&#xff1b;这关…

npm设置淘宝镜像地址

介绍 npm设置淘宝镜像 命令 npm config set registry https://registry.npmmirror.com/

【TripoSR单图3D建模】本地部署整合包

【TripoSR单图3D建模】是一款能把2D图片转换成3D模型的AI&#xff0c;由Tripo和Stability AI公司联合研发&#xff0c;是一个从收费应用转开源的项目&#xff0c;可以在Tripo官网注册后在线使用&#xff0c;但免费试用账号有一些限制&#xff0c;也可以把这个开源项目部署到本地…

基于Springboot和Redis实现的在线选课系统

1.项目简介 1.1 介绍 毕业设计真的就是demo吗&#xff1f;作为工作前的最后一个校园项目&#xff0c;毕业设计应当尽可能的贴近企业实战&#xff0c;业务不必很复杂&#xff0c;但要做到麻雀虽小五脏俱全。本期学长跟大家一起分享如何开发一个在线选课系统&#xff0c;需求也…