我压缩了我的JSON标题如下:
ByteArrayOutputStream out = new ByteArrayOutputStream();
GZIPOutputStream gzip = new GZIPOutputStream( out );
gzip.write( responseBody.encodePrettily().getBytes( "UTF-8" ) );
gzip.close();
byte[] bytes = out.toByteArray();
String response = Base64.getEncoder().encodeToString( bytes );
我从服务器发送此响应。 在任何浏览器上,响应都会自动解压缩并检索json数据。但是当在Postman,Insomnia或RestClient(Mozilla Addon)上发送GET请求时,我得到了编码的gzip而不是json数据:
H4sIAAAAAAAAAM2POwvCMBSF90L/wyVzB9tmcnZxcLFuIiE0VwikD/IQpOS/20RL1cGt0vWcw/3uN6QJANFonLIE...
如何让它解压缩?我尝试了几个Rest Clients,但没有一个像浏览器那样解压缩它。
我找不到答案,我开始感到绝望了。
答案 0 :(得分:0)
您需要包含一个Content-Coding响应标头字段,表示“gzip”(请参阅https://greenbytes.de/tech/webdav/rfc7231.html#data.encoding)
答案 1 :(得分:0)
问题解决了!实际上没有必要像我在问题中所示那样手动压缩响应,因为我们正在使用Vert.X。
Vert.X提供了一个聪明的选项,可以在HttpServerOptions中设置,以便在可能的情况下自动进行压缩(即客户端支持压缩)。邮递员和任何其他REST客户端(即浏览器或其他)获取压缩响应并自动解压缩它!
我浪费了很多时间,但至少学到了一些有用的东西。这就是我想与你分享的原因。
如果你正在使用Vert.X,这行代码将为你完成工作:
HttpServerOptions options = new HttpServerOptions().setCompressionSupported( true );
然后在创建HttpServer时使用此HttpServerOptions实例:
HttpServer server = vertx.createHttpServer( options );
PS:您可以在检查客户端返回的响应标头时验证压缩确实发生了。您会找到content-encoding : gzip
。