最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot項(xiàng)目中HTTP請(qǐng)求對(duì)響應(yīng)體進(jìn)行壓縮的方法

 更新時(shí)間:2025年06月13日 08:44:36   作者:冰糖心書(shū)房  
本文我們將梳理一下 Spring Boot 項(xiàng)目中是如何對(duì) HTTP 請(qǐng)求的響應(yīng)體 (Response Body) 進(jìn)行壓縮,請(qǐng)注意:壓縮是針對(duì)服務(wù)器返回給客戶(hù)端的響應(yīng)體,而不是客戶(hù)端發(fā)給服務(wù)器的請(qǐng)求 URL 或請(qǐng)求體,需要的朋友可以參考下

我們梳理一下 Spring Boot 項(xiàng)目中是如何對(duì) HTTP 請(qǐng)求的響應(yīng)體 (Response Body) 進(jìn)行壓縮。
(請(qǐng)注意:壓縮是針對(duì)服務(wù)器返回給客戶(hù)端的響應(yīng)體,而不是客戶(hù)端發(fā)給服務(wù)器的請(qǐng)求 URL 或請(qǐng)求體)。

核心思想:減少網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)量,加快客戶(hù)端加載速度。

結(jié)論:

Spring Boot 默認(rèn)開(kāi)啟了對(duì)常見(jiàn)文本類(lèi)型(如 JSON, HTML, CSS, JS)的響應(yīng)體壓縮(Gzip),通常我們不需要做任何配置!只需要確保:

  • 響應(yīng)體大小超過(guò)了默認(rèn)閾值 (2048 bytes)。
  • 響應(yīng) Content-Type 是默認(rèn)支持壓縮的類(lèi)型之一 (如 application/json)。
  • 客戶(hù)端在請(qǐng)求頭中聲明了 Accept-Encoding: gzip (目前瀏覽器和工具默認(rèn)都會(huì)加)。

下面是詳細(xì)的解釋和配置方法:

1. 壓縮工作原理 (協(xié)商機(jī)制)

壓縮過(guò)程是由客戶(hù)端和服務(wù)器自動(dòng)協(xié)商完成的,對(duì)Controller 代碼透明:

客戶(hù)端請(qǐng)求 (Request):
瀏覽器或 HTTP 客戶(hù)端發(fā)送請(qǐng)求時(shí),在請(qǐng)求頭中攜帶 Accept-Encoding 字段,告知服務(wù)器它支持哪些壓縮算法。

 GET /api/data HTTP/1.1
 Host: example.com
 Accept: application/json
 Accept-Encoding: gzip, deflate, br 

服務(wù)器響應(yīng) (Response):
Spring Boot(及其內(nèi)嵌容器如 Tomcat)檢查到:

  • 服務(wù)器開(kāi)啟了壓縮功能。
  • 客戶(hù)端 Accept-Encoding 中包含服務(wù)器支持的算法(如 gzip)。
  • 響應(yīng)的 Content-Type 在配置的 mime-types 列表中。
  • 響應(yīng)體的大小超過(guò)了配置的 min-response-size。
    如果所有條件滿(mǎn)足,服務(wù)器將:
  • 使用協(xié)商好的算法(如 gzip)壓縮響應(yīng)體。
  • 在響應(yīng)頭中添加 Content-Encoding 字段,告知客戶(hù)端使用了何種算法。
  • 響應(yīng)頭中的 Content-Length 變?yōu)閴嚎s后的大小。
  • 發(fā)送壓縮后的數(shù)據(jù)。
 HTTP/1.1 200 OK
 Content-Type: application/json
 Content-Encoding: gzip 
 Content-Length: 850  // <- 壓縮后的大小 (例如原始大小是 3KB)
 ...
 [壓縮后的二進(jìn)制數(shù)據(jù)]

客戶(hù)端接收:
客戶(hù)端看到 Content-Encoding: gzip 后,自動(dòng)對(duì)收到的響應(yīng)體進(jìn)行解壓,再處理原始數(shù)據(jù)。

2. Spring Boot 配置

你可以在 application.properties 或 application.yml 中進(jìn)行配置和微調(diào)。

使用 application.properties:

# 1. 啟用響應(yīng)壓縮 ( ? 默認(rèn)值: true )
#    如果你確定前端有反向代理(如 Nginx)在做壓縮,可以在這里設(shè)為 false,避免重復(fù)壓縮。
server.compression.enabled=true 

# 2. 配置需要壓縮的內(nèi)容類(lèi)型 MIME types ( ? 默認(rèn)值已包含常見(jiàn)類(lèi)型)
#    只有 Content-Type 匹配這里的列表,才會(huì)被考慮壓縮。
#    默認(rèn)值包括: text/html, text/xml, text/plain, text/css, text/javascript, 
#               application/javascript, application/json, application/xml 等等。
#    注意:不要添加已經(jīng)壓縮過(guò)的類(lèi)型,如 image/jpeg, image/png, application/zip 等,重復(fù)壓縮浪費(fèi) CPU 且效果差。
server.compression.mime-types=application/json,application/xml,text/html,text/plain,application/javascript,text/css

# 3. 觸發(fā)壓縮的最小響應(yīng)體大小 ( ? 默認(rèn)值: 2048 bytes,即 2KB )
#    如果響應(yīng)體小于此值,即使?jié)M足其他條件也不會(huì)壓縮。
#    因?yàn)閷?duì)小數(shù)據(jù)進(jìn)行壓縮的 CPU 開(kāi)銷(xiāo)可能大于節(jié)省的帶寬,得不償失。
#    單位是字節(jié)。
server.compression.min-response-size=1024 # 例如,改為 1KB

# (可選) 排除某些 User-Agent
# server.compression.excluded-user-agents=some-bad-client

使用 application.yml:

server:
 compression:
   enabled: true # 默認(rèn) true
   mime-types: # 默認(rèn)包含常見(jiàn)類(lèi)型
     - application/json
     - application/xml
     - text/html
     - text/plain
     - application/javascript
     - text/css
   min-response-size: 1024 # 默認(rèn) 2048 bytes

3. Controller 代碼示例

你的 Controller 代碼無(wú)需做任何修改!Spring Boot / 內(nèi)嵌服務(wù)器會(huì)自動(dòng)處理。

 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
 import java.util.List;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;

 @RestController
 public class MyController {

     // 模擬一個(gè)返回較大數(shù)據(jù),用于測(cè)試 GET 請(qǐng)求的響應(yīng)壓縮
     @GetMapping("/api/users")
     public List<String> getUsers() {
        // 生成一個(gè)較大的列表,確保 JSON 序列化后大小超過(guò) server.compression.min-response-size
         return IntStream.range(0, 1000)
                 .mapToObj(i -> "User Name - " + i + " with some description text here.")
                 .collect(Collectors.toList());
     }
     
      // 模擬一個(gè) POST 請(qǐng)求,它的響應(yīng)體同樣會(huì)被壓縮
      @PostMapping("/api/users/filter")
     public List<String> filterUsers(@RequestBody String filter) {
          // 假設(shè)過(guò)濾后仍然返回一個(gè)大數(shù)據(jù)
          return IntStream.range(0, 800)
                 .mapToObj(i -> "Filtered User Name - " + i + " for filter " + filter)
                 .collect(Collectors.toList());
     }
 }

當(dāng)客戶(hù)端(帶上Accept-Encoding: gzip)請(qǐng)求 /api/users 或 /api/users/filter 時(shí),如果返回的 JSON 大小超過(guò)了 min-response-size,Spring Boot 就會(huì)自動(dòng)返回 Content-Encoding: gzip 的壓縮響應(yīng)。

4. 如何驗(yàn)證?

使用瀏覽器的開(kāi)發(fā)者工具 (F12) -> 網(wǎng)絡(luò) (Network) 面板:

  1. 刷新頁(yè)面或觸發(fā) API 請(qǐng)求。
  2. 找到你的 API 請(qǐng)求記錄。
  3. 點(diǎn)擊該請(qǐng)求,查看 “標(biāo)頭” (Headers) -> “響應(yīng)標(biāo)頭” (Response Headers)。
    • 如果看到 Content-Encoding: gzip (或 brdeflate),則表示壓縮成功。
  4. 在請(qǐng)求列表的大小 (Size) 列,Chrome 等瀏覽器會(huì)顯示兩個(gè)值:
    • 上面的小數(shù)字:網(wǎng)絡(luò)傳輸?shù)?strong>壓縮后大小。
    • 下面的大數(shù)字:解壓后的原始大小。
    • 兩者有顯著差異就說(shuō)明壓縮生效了。

或者使用 curl 命令:

# -v 顯示詳細(xì)信息(包含頭)
# --compressed 告訴 curl 自動(dòng)請(qǐng)求并解壓 (它會(huì)自動(dòng)加上 Accept-Encoding: gzip, deflate 并根據(jù) Content-Encoding 解壓)
# -o /dev/null 不輸出內(nèi)容到屏幕
curl -v --compressed http://localhost:8080/api/users -o /dev/null

在 curl 的輸出中查找 Response Headers 是否包含 Content-Encoding: gzip。

5. 注意事項(xiàng)

  • 反向代理 (Reverse Proxy): 在生產(chǎn)環(huán)境中,Spring Boot 應(yīng)用前端經(jīng)常會(huì)有 Nginx, Apache 或負(fù)載均衡器。這些反向代理通常也具備非常高效的壓縮能力。最佳實(shí)踐通常是在反向代理層(如 Nginx)統(tǒng)一處理壓縮,而在 Spring Boot 中關(guān)閉壓縮 (server.compression.enabled=false),以避免重復(fù)壓縮和減輕應(yīng)用服務(wù)器的 CPU 負(fù)擔(dān)。
  • CPU 開(kāi)銷(xiāo): 壓縮會(huì)消耗服務(wù)器 CPU 資源。
  • 不要壓縮已壓縮內(nèi)容: 確保 mime-types 里不包含圖片 (jpg, png, gif)、視頻、zip 包等,它們本身就是壓縮格式,再次壓縮基本無(wú)效甚至可能增大體積,且浪費(fèi) CPU。
  • Streaming 響應(yīng): 對(duì)于流式響應(yīng)(例如 StreamingResponseBody 或 WebFlux 的 Flux),壓縮機(jī)制依然有效,但實(shí)現(xiàn)方式略有不同(邊生成邊壓縮邊發(fā)送)。

總的來(lái)說(shuō),Spring Boot 提供了開(kāi)箱即用的響應(yīng)體壓縮功能,通過(guò)簡(jiǎn)單的 server.compression.* 屬性即可配置,無(wú)需修改業(yè)務(wù)代碼。

以上就是SpringBoot項(xiàng)目中HTTP請(qǐng)求對(duì)響應(yīng)體進(jìn)行壓縮的方法的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot HTTP響應(yīng)體壓縮的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringBoot注解機(jī)制實(shí)現(xiàn)API多版本共存和灰度發(fā)布的方案

    SpringBoot注解機(jī)制實(shí)現(xiàn)API多版本共存和灰度發(fā)布的方案

    在快速迭代的產(chǎn)品開(kāi)發(fā)中,API接口的更新迭代是常態(tài),然而,舊版本接口往往已經(jīng)有大量用戶(hù)依賴(lài),無(wú)法立即停用,那么如何在不影響現(xiàn)有用戶(hù)的前提下平滑引入新版本API,本文將介紹如何通過(guò)Spring Boot注解機(jī)制實(shí)現(xiàn)API多版本共存,并基于此實(shí)現(xiàn)灰度發(fā)布,需要的朋友可以參考下
    2025-06-06
  • Java使用Curator進(jìn)行ZooKeeper操作的詳細(xì)教程

    Java使用Curator進(jìn)行ZooKeeper操作的詳細(xì)教程

    Apache Curator 是一個(gè)基于 ZooKeeper 的 Java 客戶(hù)端庫(kù),它極大地簡(jiǎn)化了使用 ZooKeeper 的開(kāi)發(fā)工作,在分布式系統(tǒng)中,ZooKeeper 通常被用來(lái)作為協(xié)調(diào)服務(wù),而 Curator 則為我們提供了更簡(jiǎn)潔易用的接口,本文將介紹 Curator 的核心功能及實(shí)踐樣例,需要的朋友可以參考下
    2025-04-04
  • Spring中緩存注解@Cache的使用詳解

    Spring中緩存注解@Cache的使用詳解

    這篇文章主要介紹了Spring中緩存注解@Cache的使用詳解,使用注解對(duì)數(shù)據(jù)進(jìn)行緩存功能的框架,只需要簡(jiǎn)單地加一個(gè)注解,就能實(shí)現(xiàn)緩存功能,大大簡(jiǎn)化我們?cè)跇I(yè)務(wù)中操作緩存的代碼,需要的朋友可以參考下
    2023-07-07
  • StackTraceElement獲取方法調(diào)用棧信息實(shí)例詳解

    StackTraceElement獲取方法調(diào)用棧信息實(shí)例詳解

    這篇文章主要介紹了StackTraceElement獲取方法調(diào)用棧信息實(shí)例詳解,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • Spring創(chuàng)建Bean的八種主要方式詳解

    Spring創(chuàng)建Bean的八種主要方式詳解

    Spring(尤其是 Spring Boot)提供了多種方式來(lái)讓容器創(chuàng)建和管理 Bean,@Component、@Configuration + @Bean、@EnableConfigurationProperties 都是常見(jiàn)方式,下面我為你系統(tǒng)地梳理 Spring 創(chuàng)建 Bean 的所有主要方式,并說(shuō)明它們的使用場(chǎng)景和區(qū)別,需要的朋友可以參考下
    2025-08-08
  • Java圖像處理教程之正片疊底效果的實(shí)現(xiàn)

    Java圖像處理教程之正片疊底效果的實(shí)現(xiàn)

    正片疊底效果是我們平時(shí)在Photoshop中會(huì)見(jiàn)到的一種效果,下面這篇文章主要給大家介紹了關(guān)于利用Java如何實(shí)現(xiàn)正片疊底的效果,分享出來(lái)供大家參考學(xué)習(xí),文中給出了詳細(xì)的示例代碼供大家參考學(xué)習(xí),需要的朋友可以參考借鑒,下面來(lái)一起看看詳細(xì)的介紹吧。
    2017-09-09
  • Java之next()、nextLine()區(qū)別及問(wèn)題解決

    Java之next()、nextLine()區(qū)別及問(wèn)題解決

    這篇文章主要介紹了Java之next()、nextLine()區(qū)別及問(wèn)題解決,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 合成聚合復(fù)用原則_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    合成聚合復(fù)用原則_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了合成聚合復(fù)用原則,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • 解決RestTemplate第一次請(qǐng)求響應(yīng)速度較慢的問(wèn)題

    解決RestTemplate第一次請(qǐng)求響應(yīng)速度較慢的問(wèn)題

    這篇文章主要介紹了解決RestTemplate第一次請(qǐng)求響應(yīng)速度較慢的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Spring?Boot指標(biāo)監(jiān)控及日志管理示例詳解

    Spring?Boot指標(biāo)監(jiān)控及日志管理示例詳解

    Spring Boot Actuator可以幫助程序員監(jiān)控和管理SpringBoot應(yīng)用,比如健康檢查、內(nèi)存使用情況統(tǒng)計(jì)、線(xiàn)程使用情況統(tǒng)計(jì)等,這篇文章主要介紹了Spring?Boot指標(biāo)監(jiān)控及日志管理,需要的朋友可以參考下
    2023-11-11

最新評(píng)論

商南县| 关岭| 鄂托克前旗| 柘城县| 精河县| 宁化县| 垦利县| 通山县| 丰顺县| 瓮安县| 鹤庆县| 江川县| 神木县| 普定县| 浏阳市| 乐清市| 营口市| 交城县| 甘肃省| 台山市| 兖州市| 武穴市| 黑河市| 赞皇县| 南江县| 南丰县| 邮箱| 六盘水市| 郁南县| 安平县| 贵港市| 岢岚县| 揭东县| 游戏| 格尔木市| 南岸区| 育儿| 屏山县| 开原市| 乐昌市| 澳门|