【问题标题】:How to send Gzip Request using RestTemplate?如何使用 RestTemplate 发送 Gzip 请求?
【发布时间】:2021-03-10 14:16:51
【问题描述】:

我有以下带有大型 pojo (MyRequest) 的代码,我想用 Gzip 发送它,但它无法到达接受 Gzip 请求的端点。我是否正确创建了 Gzip 请求?我需要将 pojo 作为文件发送吗?

MyRequest request = new MyRequest ();

HttpHeaders httpHeaders = HttpHeaders();
httpHeaders.add(HttpHeaders.CONTENT_ENCODING, "gzip");
httpHeaders.add(HttpHeaders.ACCEPT_ENCODING, "gzip");
httpHeaders.add(HttpHeaders.CONTENT_TYPE, "gzip");

HttpEntity<byte[]> entity = new HttpEntity<>(compress(request), headers);
ResponseEntity<MyResponse> response = restTemplate.postForEntity(url, entity, MyResponse.class);



public static Byte[] compress(byte[] body) throws IOException {
  
  ByteArrayOutputStream baos = new ByteArrayOutputStream();
  try (GZIPOutputStream gzipOutputStream = new GZIPOutputStream(baos)) {
    gzipOutputStream.write(body);
  }
  
  return baos.toByteArray();
}

请分享一个使用 RestTemplate 进行 Gzip 编码的示例,谢谢

【问题讨论】:

  • 你为什么要这样做?只有 response 正文应该被压缩,我找不到对 client 将发送压缩内容的实例的单个引用。见这里en.wikipedia.org/wiki/HTTP_compression
  • 您可以发送 Gzip 压缩请求。请求对象的大小 > 5GBs。
  • 显然,你是对的.. 有人需要更新 MDN ))))
  • 你可以看看这个,我猜 RestTemplate 不是你可以在 Java 中执行 HTTP 请求的唯一方法:stackoverflow.com/questions/24635190/…

标签: java spring-boot gzip resttemplate spring-resttemplate


【解决方案1】:
accept-encoding: gzip, deflate, br

用于 http 客户端向服务器发出请求并期望 http 响应为:

content-encoding: gzip

对于您正在做的事情,请参阅此答案:https://serverfault.com/a/56707

【讨论】:

  • 除了提供链接之外,通过将重要信息添加到答案本身,这个答案会更好。
  • 如果我可以将此问题标记为重复,我会的。
  • 故意的问题不能与另一个网站上的问题重复,尽管涵盖了同样的事情。无论如何,这两个问题是完全不同的。这是来自客户端的编程问题,也是来自服务器端的 IT 管理员问题。
猜你喜欢
  • 2017-08-28
  • 2016-05-29
  • 1970-01-01
  • 2020-01-03
  • 1970-01-01
  • 1970-01-01
  • 2017-04-16
  • 1970-01-01
  • 2015-02-11
相关资源
最近更新 更多