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
的含義是 響應(yīng)內(nèi)容的最小大小,以字節(jié)為單位。即當(dāng)響應(yīng)內(nèi)容的大小達(dá)到或超過 1024 字節(jié)時(shí),服務(wù)器會(huì)對(duì)該響應(yīng)內(nèi)容進(jìn)行壓縮;如果內(nèi)容小于 1024 字節(jié),則不會(huì)啟用壓縮。
解釋
- 單位:1024 表示字節(jié)(1 KB),這意味著只有響應(yīng)內(nèi)容大小超過 1 KB 時(shí),服務(wù)器才會(huì)對(duì)這些內(nèi)容進(jìn)行壓縮。
- 作用:避免對(duì)小型響應(yīng)進(jìn)行壓縮,因?yàn)閴嚎s較小的數(shù)據(jù)可能反而增加開銷,對(duì)性能沒有顯著的提升。
示例
- 如果返回的數(shù)據(jù)大小為 500 字節(jié)(小于 1024 字節(jié)),則不會(huì)壓縮。
- 如果返回的數(shù)據(jù)大小為 1500 字節(jié)(大于 1024 字節(jié)),則會(huì)啟用壓縮。
通過配置 min-response-size
可以優(yōu)化服務(wù)器性能,使壓縮只應(yīng)用于較大的響應(yīng)內(nèi)容。
引入帶來的問題
解決問題
開啟壓縮后,服務(wù)器會(huì)將響應(yīng)數(shù)據(jù)以 GZIP 壓縮的形式發(fā)送給客戶端。如果客戶端沒有正確解壓縮這些數(shù)據(jù),可能會(huì)導(dǎo)致解析失敗,因?yàn)榭蛻舳藭?huì)嘗試將壓縮的字節(jié)流當(dāng)作普通文本來讀取,結(jié)果出現(xiàn)序列化異常。
解決方案
確認(rèn)客戶端支持解壓縮
確??蛻舳酥С植⒄_處理 GZIP 壓縮的數(shù)據(jù)。在大多數(shù) HTTP 客戶端(如瀏覽器、Postman、Spring RestTemplate)中,設(shè)置 Accept-Encoding: gzip, deflate
請(qǐng)求頭會(huì)自動(dòng)解壓縮響應(yīng)內(nèi)容。
檢查是否自動(dòng)解壓縮(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
作為客戶端,它應(yīng)該能夠自動(dòng)處理 GZIP 響應(yīng),但確保請(qǐng)求頭包含 Accept-Encoding: gzip, deflate
。
關(guān)閉 GZIP 壓縮(臨時(shí)解決方案)
server: compression: enabled: false
如果您無法保證客戶端正確解壓縮數(shù)據(jù),可以考慮在服務(wù)器端禁用壓縮以避免異常:
調(diào)整 MIME 類型
server: compression: enabled: true mime-types: application/xml,text/html,text/xml,text/plain # 排除 application/json min-response-size: 1024
如果只希望壓縮特定類型的響應(yīng)(例如,HTML 和 XML),可以修改 mime-types
配置,排除 application/json
:
通過上述調(diào)整,您可以避免由于壓縮導(dǎo)致的客戶端解析錯(cuò)誤。最優(yōu)方案是確保客戶端正確處理 GZIP 響應(yīng),避免禁用壓縮帶來的性能影響。
到此這篇關(guān)于SpringBoot開啟server:compression:enabled(Illegal character ((CTRL-CHAR, code 31)))的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)SpringBoot開啟server:compression:enabled內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- springboot整合websocket后啟動(dòng)報(bào)錯(cuò)(javax.websocket.server.ServerContainer not available)
- SpringBoot服務(wù)設(shè)置禁止server.point端口的使用
- springboot中server.ssl.key-store配置路徑的問題小結(jié)
- 使用Java和SpringBoot實(shí)現(xiàn)服務(wù)器發(fā)送事件(Server-Sent Events)
- SpringBoot中的server.context-path的實(shí)現(xiàn)
- SpringBoot實(shí)現(xiàn)Server-Sent Events(SSE)的使用完整指南
相關(guān)文章
Java中的CountDownLatch、CyclicBarrier和semaphore實(shí)現(xiàn)原理解讀
這篇文章主要介紹了Java中的CountDownLatch、CyclicBarrier和semaphore實(shí)現(xiàn)原理詳解,CountDownLatch中調(diào)用await方法線程需要等待所有調(diào)用countDown方法的線程執(zhí)行,這就很適合一個(gè)業(yè)務(wù)需要一些準(zhǔn)備條件,等準(zhǔn)備條件準(zhǔn)備好之后再繼續(xù)執(zhí)行,需要的朋友可以參考下2023-12-12mybatis 忽略實(shí)體對(duì)象的某個(gè)屬性(2種方式)
這篇文章主要介紹了mybatis 忽略實(shí)體對(duì)象的某個(gè)屬性方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06Java中synchronized關(guān)鍵字的使用和原理詳解
這篇文章主要介紹了Java中synchronized關(guān)鍵字的使用和原理詳解,JVM 是通過進(jìn)入、退出 對(duì)象監(jiān)視器(Monitor)來實(shí)現(xiàn)對(duì)方法、同步塊的同步的,而對(duì)象監(jiān)視器的本質(zhì)依賴于底層操作系統(tǒng)的互斥鎖實(shí)現(xiàn),需要的朋友可以參考下2023-09-09MyBatis-plus實(shí)現(xiàn)逆向生成器
本文主要介紹了MyBatis-plus實(shí)現(xiàn)逆向生成器,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08Java中關(guān)于控制臺(tái)讀取數(shù)字或字符串的方法
下面小編就為大家?guī)硪黄狫ava中關(guān)于控制臺(tái)讀取數(shù)字或字符串的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-10-10