SpringBoot開(kāi)啟server:compression:enabled(Illegal character ((CTRL-CHAR, code 31)))的問(wèn)題解決
在 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á)到或超過(guò) 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)容大小超過(guò) 1 KB 時(shí),服務(wù)器才會(huì)對(duì)這些內(nèi)容進(jìn)行壓縮。
- 作用:避免對(duì)小型響應(yīng)進(jìn)行壓縮,因?yàn)閴嚎s較小的數(shù)據(jù)可能反而增加開(kāi)銷(xiāo),對(duì)性能沒(méi)有顯著的提升。
示例
- 如果返回的數(shù)據(jù)大小為 500 字節(jié)(小于 1024 字節(jié)),則不會(huì)壓縮。
- 如果返回的數(shù)據(jù)大小為 1500 字節(jié)(大于 1024 字節(jié)),則會(huì)啟用壓縮。
通過(guò)配置 min-response-size 可以?xún)?yōu)化服務(wù)器性能,使壓縮只應(yīng)用于較大的響應(yīng)內(nèi)容。
引入帶來(lái)的問(wèn)題

解決問(wèn)題
開(kāi)啟壓縮后,服務(wù)器會(huì)將響應(yīng)數(shù)據(jù)以 GZIP 壓縮的形式發(fā)送給客戶(hù)端。如果客戶(hù)端沒(méi)有正確解壓縮這些數(shù)據(jù),可能會(huì)導(dǎo)致解析失敗,因?yàn)榭蛻?hù)端會(huì)嘗試將壓縮的字節(jié)流當(dāng)作普通文本來(lái)讀取,結(jié)果出現(xiàn)序列化異常。
解決方案
確認(rèn)客戶(hù)端支持解壓縮
確??蛻?hù)端支持并正確處理 GZIP 壓縮的數(shù)據(jù)。在大多數(shù) HTTP 客戶(hù)端(如瀏覽器、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 作為客戶(hù)端,它應(yīng)該能夠自動(dòng)處理 GZIP 響應(yīng),但確保請(qǐng)求頭包含 Accept-Encoding: gzip, deflate。
關(guān)閉 GZIP 壓縮(臨時(shí)解決方案)
server:
compression:
enabled: false
如果您無(wú)法保證客戶(hù)端正確解壓縮數(shù)據(jù),可以考慮在服務(wù)器端禁用壓縮以避免異常:
調(diào)整 MIME 類(lèi)型
server:
compression:
enabled: true
mime-types: application/xml,text/html,text/xml,text/plain # 排除 application/json
min-response-size: 1024
如果只希望壓縮特定類(lèi)型的響應(yīng)(例如,HTML 和 XML),可以修改 mime-types 配置,排除 application/json:
通過(guò)上述調(diào)整,您可以避免由于壓縮導(dǎo)致的客戶(hù)端解析錯(cuò)誤。最優(yōu)方案是確??蛻?hù)端正確處理 GZIP 響應(yīng),避免禁用壓縮帶來(lái)的性能影響。
到此這篇關(guān)于SpringBoot開(kāi)啟server:compression:enabled(Illegal character ((CTRL-CHAR, code 31)))的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)SpringBoot開(kāi)啟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配置路徑的問(wèn)題小結(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)文章
連續(xù)調(diào)用多個(gè)外部系統(tǒng)寫(xiě)接口保證數(shù)據(jù)一致性的思路
今天小編就為大家分享一篇關(guān)于連續(xù)調(diào)用多個(gè)外部系統(tǒng)寫(xiě)接口保證數(shù)據(jù)一致性的思路,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-12-12
詳解RocketMQ 消費(fèi)端如何監(jiān)聽(tīng)消息
這篇文章主要為大家介紹了RocketMQ 消費(fèi)端如何監(jiān)聽(tīng)消息示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
Maven項(xiàng)目中使用本地jar包的兩種方法詳解
這篇文章主要為大家詳細(xì)介紹了Maven項(xiàng)目中使用本地jar包的兩種方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2026-01-01
jmeter調(diào)試錯(cuò)誤全集(入門(mén)必備)
在使用jmeter做接口測(cè)試的過(guò)程中大家是不是經(jīng)常會(huì)遇到很多問(wèn)題,本文就介紹了jmeter調(diào)試錯(cuò)誤全集,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11
IDE Eval Reset忘了重置進(jìn)不去的完美解決方法
這篇文章主要介紹了IDE Eval Reset忘了重置進(jìn)不去的完美解決方法,插件安裝方式包括離線安裝和在線安裝方式,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-12-12
使用jxls自定義命令設(shè)置動(dòng)態(tài)行高
這篇文章主要介紹了使用jxls自定義命令設(shè)置動(dòng)態(tài)行高,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08

