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

news/2024/4/28 23:52:49

背景:项目链路为腾讯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://www.cpky.cn/p/10660.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

python之自动化(django)

1、安装 我用的是pip install Django 在命令行中安装 然后django-admin startproject autotext(在命令行中) 这句话是创建一个django 项目 然后切换到你所创建项目的目录下 输入: python manage.py runserver 当你出现以下错误时 You…

【Python使用】python高级进阶知识md总结第4篇:静态Web服务器-命令行启动动态绑定端口号,html 的介绍【附代码文档】

python高级进阶全知识知识笔记总结完整教程(附代码资料)主要内容讲述:操作系统,虚拟机软件,Ubuntu操作系统,Linux内核及发行版,查看目录命令,切换目录命令,绝对路径和相对…

C语言—打印如图矩阵

输出矩阵 在一个二维数组中形成并输出如下矩阵: #include <stdio.h> main() { int i,j,a[5][5];for(i0;i<4;i)for(j0;j<4;j)if(i<j) a[i][j]1;else a[i][j]i-j1;for(i0;i<4;i){ for(j0;j<4;j)printf("%d ",a[i][j]);printf("…

redis中List和hash数据类型

list类型是用来存储多个有序的字符串的&#xff0c;列表当中的每一个字符看做一个元素&#xff0c;一个列表当中可以存储一个或者多个元素&#xff0c;redis的list支持存储2^32-1个元素。redis可以从列表的两端进行插入&#xff08;pubsh&#xff09;和弹出&#xff08;pop&…

嵌入式硬件设计(一)|利用 NodeMCU-ESP8266 开发板和继电器结合APP“点灯•blinker”制作Wi-Fi智能开关(附有关硬件详细资料)

概述 本文主要讲述利用 NodeMCU-ESP8266 开发板和继电器通过手机 APP “ 点灯 • Blinker ” 制作一款能够由手机控制的WiFi 智能开关&#xff0c;从而实现智能物联。NodeMCU 是基于 Lua 的开源固件&#xff0c;ESP8266-NodeMCU是一个开源硬件开发板&#xff0c;支持WiFi功能&a…

HTML常用基础标签:图片与超链接标签全解!

HTML图片标签和超链接标签是网页开发中常用的两种标签&#xff0c;它们分别用于在网页中插入图片和创建超链接。 我们每天都在互联网世界中与各种形式的信息打交道。你是否好奇过&#xff0c;当你点击一篇文章中的图片或链接时&#xff0c;是什么神奇的力量让你瞬间跳转到另一…