java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > SpringBoot开启server:compression:enabled

SpringBoot开启server:compression:enabled(Illegal character ((CTRL-CHAR, code 31)))的问题解决

作者:techzhi

本文主要介绍了SpringBoot开启server:compression:enabled(Illegal character ((CTRL-CHAR, code 31)))的的问题解决,具有一定的参考价值,感兴趣的可以了解一下

在 Spring Boot 的配置中:

server:
   compression:
     enabled: true
     mime-types: application/json,application/xml,text/html,text/xml,text/plain
     min-response-size: 1024

min-response-size: 1024 的含义是 响应内容的最小大小,以字节为单位。即当响应内容的大小达到或超过 1024 字节时,服务器会对该响应内容进行压缩;如果内容小于 1024 字节,则不会启用压缩。

解释

示例

通过配置 min-response-size 可以优化服务器性能,使压缩只应用于较大的响应内容。

引入带来的问题

在这里插入图片描述

解决问题

开启压缩后,服务器会将响应数据以 GZIP 压缩的形式发送给客户端。如果客户端没有正确解压缩这些数据,可能会导致解析失败,因为客户端会尝试将压缩的字节流当作普通文本来读取,结果出现序列化异常。

解决方案

确认客户端支持解压缩

确保客户端支持并正确处理 GZIP 压缩的数据。在大多数 HTTP 客户端(如浏览器、Postman、Spring RestTemplate)中,设置 Accept-Encoding: gzip, deflate 请求头会自动解压缩响应内容。

检查是否自动解压缩(Spring RestTemplate 示例)

HttpHeaders headers = new HttpHeaders();
headers.add("Accept-Encoding", "gzip, deflate");

HttpEntity<String> requestEntity = new HttpEntity<>(headers);
ResponseEntity<String> response = restTemplate.exchange(targetUrl, HttpMethod.GET, requestEntity, String.class);

如果使用 Spring 的 RestTemplate 作为客户端,它应该能够自动处理 GZIP 响应,但确保请求头包含 Accept-Encoding: gzip, deflate

关闭 GZIP 压缩(临时解决方案)

server:
  compression:
    enabled: false

如果您无法保证客户端正确解压缩数据,可以考虑在服务器端禁用压缩以避免异常:

调整 MIME 类型

server:
  compression:
    enabled: true
    mime-types: application/xml,text/html,text/xml,text/plain  # 排除 application/json
    min-response-size: 1024

如果只希望压缩特定类型的响应(例如,HTML 和 XML),可以修改 mime-types 配置,排除 application/json

通过上述调整,您可以避免由于压缩导致的客户端解析错误。最优方案是确保客户端正确处理 GZIP 响应,避免禁用压缩带来的性能影响。

到此这篇关于SpringBoot开启server:compression:enabled(Illegal character ((CTRL-CHAR, code 31)))的实现的文章就介绍到这了,更多相关SpringBoot开启server:compression:enabled内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文