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 的含義是 響應內容的最小大小,以字節(jié)為單位。即當響應內容的大小達到或超過 1024 字節(jié)時,服務器會對該響應內容進行壓縮;如果內容小于 1024 字節(jié),則不會啟用壓縮。
解釋
- 單位:1024 表示字節(jié)(1 KB),這意味著只有響應內容大小超過 1 KB 時,服務器才會對這些內容進行壓縮。
- 作用:避免對小型響應進行壓縮,因為壓縮較小的數據可能反而增加開銷,對性能沒有顯著的提升。
示例
- 如果返回的數據大小為 500 字節(jié)(小于 1024 字節(jié)),則不會壓縮。
- 如果返回的數據大小為 1500 字節(jié)(大于 1024 字節(jié)),則會啟用壓縮。
通過配置 min-response-size 可以優(yōu)化服務器性能,使壓縮只應用于較大的響應內容。
引入帶來的問題

解決問題
開啟壓縮后,服務器會將響應數據以 GZIP 壓縮的形式發(fā)送給客戶端。如果客戶端沒有正確解壓縮這些數據,可能會導致解析失敗,因為客戶端會嘗試將壓縮的字節(jié)流當作普通文本來讀取,結果出現序列化異常。
解決方案
確認客戶端支持解壓縮
確??蛻舳酥С植⒄_處理 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:
通過上述調整,您可以避免由于壓縮導致的客戶端解析錯誤。最優(yōu)方案是確??蛻舳苏_處理 GZIP 響應,避免禁用壓縮帶來的性能影響。
到此這篇關于SpringBoot開啟server:compression:enabled(Illegal character ((CTRL-CHAR, code 31)))的實現的文章就介紹到這了,更多相關SpringBoot開啟server:compression:enabled內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java中的CountDownLatch、CyclicBarrier和semaphore實現原理解讀
這篇文章主要介紹了Java中的CountDownLatch、CyclicBarrier和semaphore實現原理詳解,CountDownLatch中調用await方法線程需要等待所有調用countDown方法的線程執(zhí)行,這就很適合一個業(yè)務需要一些準備條件,等準備條件準備好之后再繼續(xù)執(zhí)行,需要的朋友可以參考下2023-12-12

