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 字节,则不会启用压缩。

解释

  • 单位:1024 表示字节(1 KB),这意味着只有响应内容大小超过 1 KB 时,服务器才会对这些内容进行压缩。
  • 作用:避免对小型响应进行压缩,因为压缩较小的数据可能反而增加开销,对性能没有显著的提升。

示例

  • 如果返回的数据大小为 500 字节(小于 1024 字节),则不会压缩。
  • 如果返回的数据大小为 1500 字节(大于 1024 字节),则会启用压缩。

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

引入带来的问题

在这里插入图片描述

解决问题

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

解决方案
  1. 确认客户端支持解压缩

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

    • 如果使用 Spring 的 RestTemplate 作为客户端,它应该能够自动处理 GZIP 响应,但确保请求头包含 Accept-Encoding: gzip, deflate
    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);
    
  3. 关闭 GZIP 压缩(临时解决方案)

    • 如果您无法保证客户端正确解压缩数据,可以考虑在服务器端禁用压缩以避免异常:
    server:
      compression:
        enabled: false
    
  4. 调整 MIME 类型

    • 如果只希望压缩特定类型的响应(例如,HTML 和 XML),可以修改 mime-types 配置,排除 application/json
    server:
      compression:
        enabled: true
        mime-types: application/xml,text/html,text/xml,text/plain  # 排除 application/json
        min-response-size: 1024
    

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值