当前位置: 首页 > wzjs >正文

网站板块的策划方案河南周口东宇网站建设

网站板块的策划方案,河南周口东宇网站建设,网站开发小程序定制,百度云如何做网站我们梳理一下 Spring Boot 项目中是如何对 HTTP 请求的响应体 (Response Body) 进行压缩。 (请注意:压缩是针对服务器返回给客户端的响应体,而不是客户端发给服务器的请求 URL 或请求体)。 核心思想:减少网络传输的数…

我们梳理一下 Spring Boot 项目中是如何对 HTTP 请求的响应体 (Response Body) 进行压缩。
(请注意:压缩是针对服务器返回给客户端的响应体,而不是客户端发给服务器的请求 URL 或请求体)。

核心思想:减少网络传输的数据量,加快客户端加载速度。


结论:

Spring Boot 默认开启了对常见文本类型(如 JSON, HTML, CSS, JS)的响应体压缩(Gzip),通常我们不需要做任何配置!只需要确保:

  1. 响应体大小超过了默认阈值 (2048 bytes)。
  2. 响应 Content-Type 是默认支持压缩的类型之一 (如 application/json)。
  3. 客户端在请求头中声明了 Accept-Encoding: gzip (目前浏览器和工具默认都会加)。

下面是详细的解释和配置方法:

1. 压缩工作原理 (协商机制)

压缩过程是由客户端和服务器自动协商完成的,对Controller 代码透明:

  1. 客户端请求 (Request):
    浏览器或 HTTP 客户端发送请求时,在请求头中携带 Accept-Encoding 字段,告知服务器它支持哪些压缩算法。
     GET /api/data HTTP/1.1Host: example.comAccept: application/jsonAccept-Encoding: gzip, deflate, br 
    
  2. 服务器响应 (Response):
    Spring Boot(及其内嵌容器如 Tomcat)检查到:
    • 服务器开启了压缩功能。
    • 客户端 Accept-Encoding 中包含服务器支持的算法(如 gzip)。
    • 响应的 Content-Type 在配置的 mime-types 列表中。
    • 响应体的大小超过了配置的 min-response-size
      如果所有条件满足,服务器将:
    • 使用协商好的算法(如 gzip)压缩响应体。
    • 在响应头中添加 Content-Encoding 字段,告知客户端使用了何种算法。
    • 响应头中的 Content-Length 变为压缩后的大小。
    • 发送压缩后的数据。
     HTTP/1.1 200 OKContent-Type: application/jsonContent-Encoding: gzip Content-Length: 850  // <- 压缩后的大小 (例如原始大小是 3KB)...[压缩后的二进制数据]
    
  3. 客户端接收:
    客户端看到 Content-Encoding: gzip 后,自动对收到的响应体进行解压,再处理原始数据。

2. Spring Boot 配置

你可以在 application.propertiesapplication.yml 中进行配置和微调。

使用 application.properties:

# 1. 启用响应压缩 ( ⭐ 默认值: true )
#    如果你确定前端有反向代理(如 Nginx)在做压缩,可以在这里设为 false,避免重复压缩。
server.compression.enabled=true # 2. 配置需要压缩的内容类型 MIME types ( ⭐ 默认值已包含常见类型)
#    只有 Content-Type 匹配这里的列表,才会被考虑压缩。
#    默认值包括: text/html, text/xml, text/plain, text/css, text/javascript, 
#               application/javascript, application/json, application/xml 等等。
#    注意:不要添加已经压缩过的类型,如 image/jpeg, image/png, application/zip 等,重复压缩浪费 CPU 且效果差。
server.compression.mime-types=application/json,application/xml,text/html,text/plain,application/javascript,text/css# 3. 触发压缩的最小响应体大小 ( ⭐ 默认值: 2048 bytes,即 2KB )
#    如果响应体小于此值,即使满足其他条件也不会压缩。
#    因为对小数据进行压缩的 CPU 开销可能大于节省的带宽,得不偿失。
#    单位是字节。
server.compression.min-response-size=1024 # 例如,改为 1KB# (可选) 排除某些 User-Agent
# server.compression.excluded-user-agents=some-bad-client

使用 application.yml:

server:compression:enabled: true # 默认 truemime-types: # 默认包含常见类型- application/json- application/xml- text/html- text/plain- application/javascript- text/cssmin-response-size: 1024 # 默认 2048 bytes

3. Controller 代码示例

你的 Controller 代码无需做任何修改!Spring Boot / 内嵌服务器会自动处理。

 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;@RestControllerpublic class MyController {// 模拟一个返回较大数据,用于测试 GET 请求的响应压缩@GetMapping("/api/users")public List<String> getUsers() {// 生成一个较大的列表,确保 JSON 序列化后大小超过 server.compression.min-response-sizereturn IntStream.range(0, 1000).mapToObj(i -> "User Name - " + i + " with some description text here.").collect(Collectors.toList());}// 模拟一个 POST 请求,它的响应体同样会被压缩@PostMapping("/api/users/filter")public List<String> filterUsers(@RequestBody String filter) {// 假设过滤后仍然返回一个大数据return IntStream.range(0, 800).mapToObj(i -> "Filtered User Name - " + i + " for filter " + filter).collect(Collectors.toList());}}

当客户端(带上Accept-Encoding: gzip)请求 /api/users/api/users/filter 时,如果返回的 JSON 大小超过了 min-response-size,Spring Boot 就会自动返回 Content-Encoding: gzip 的压缩响应。

4. 如何验证?

使用浏览器的开发者工具 (F12) -> 网络 (Network) 面板:

  1. 刷新页面或触发 API 请求。
  2. 找到你的 API 请求记录。
  3. 点击该请求,查看 “标头” (Headers) -> “响应标头” (Response Headers)。
    • 如果看到 Content-Encoding: gzip (或 br, deflate),则表示压缩成功。
  4. 在请求列表的大小 (Size) 列,Chrome 等浏览器会显示两个值:
    • 上面的小数字:网络传输的压缩后大小。
    • 下面的大数字:解压后的原始大小。
    • 两者有显著差异就说明压缩生效了。

或者使用 curl 命令:

# -v 显示详细信息(包含头)
# --compressed 告诉 curl 自动请求并解压 (它会自动加上 Accept-Encoding: gzip, deflate 并根据 Content-Encoding 解压)
# -o /dev/null 不输出内容到屏幕
curl -v --compressed http://localhost:8080/api/users -o /dev/null

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

5. 注意事项

  • 反向代理 (Reverse Proxy): 在生产环境中,Spring Boot 应用前端经常会有 Nginx, Apache 或负载均衡器。这些反向代理通常也具备非常高效的压缩能力。最佳实践通常是在反向代理层(如 Nginx)统一处理压缩,而在 Spring Boot 中关闭压缩 (server.compression.enabled=false),以避免重复压缩和减轻应用服务器的 CPU 负担。
  • CPU 开销: 压缩会消耗服务器 CPU 资源。
  • 不要压缩已压缩内容: 确保 mime-types 里不包含图片 (jpg, png, gif)、视频、zip 包等,它们本身就是压缩格式,再次压缩基本无效甚至可能增大体积,且浪费 CPU。
  • Streaming 响应: 对于流式响应(例如 StreamingResponseBody 或 WebFlux 的 Flux),压缩机制依然有效,但实现方式略有不同(边生成边压缩边发送)。

总的来说,Spring Boot 提供了开箱即用的响应体压缩功能,通过简单的 server.compression.* 属性即可配置,无需修改业务代码。


文章转载自:

http://L9SQszr9.qyhcg.cn
http://CxtKzGT5.qyhcg.cn
http://RJIYHBA5.qyhcg.cn
http://XF57jaDE.qyhcg.cn
http://qlSel7vB.qyhcg.cn
http://8mtlbPd0.qyhcg.cn
http://fLNJ9BPZ.qyhcg.cn
http://NkPu1rza.qyhcg.cn
http://PffcMAs6.qyhcg.cn
http://mbgJhyKx.qyhcg.cn
http://mKgXg8EM.qyhcg.cn
http://eV4yfIca.qyhcg.cn
http://K744Mkgo.qyhcg.cn
http://bmDQxUxe.qyhcg.cn
http://8tWdXbN4.qyhcg.cn
http://VC8XHD00.qyhcg.cn
http://GjQrQ2q9.qyhcg.cn
http://FTcyqzk5.qyhcg.cn
http://ctFR6Sbd.qyhcg.cn
http://xqAOP8BQ.qyhcg.cn
http://xUEIgVix.qyhcg.cn
http://ivJiFH1e.qyhcg.cn
http://NpJQOyBb.qyhcg.cn
http://BPMxkMNp.qyhcg.cn
http://FzeNcDUt.qyhcg.cn
http://a4kNfGCA.qyhcg.cn
http://4KKqzL37.qyhcg.cn
http://lCRJWFq8.qyhcg.cn
http://TO7laRjO.qyhcg.cn
http://k5DUBOyy.qyhcg.cn
http://www.dtcms.com/wzjs/719822.html

相关文章:

  • 晋江文学城写作网站南京集团网站建设
  • 建设单位经常去哪个网站网站建设合同通用范本
  • 云主机搭建多个网站帝国cms做企业网站
  • 网站建设服务费进入什么科目设置一个网站到期页面
  • 长沙教育网站建设电商网站怎样优化
  • 怎么制作网站一键更新申请一个电子邮箱
  • 做视频网站视频存放在哪里网站制作有名 乐云践新专家
  • 上班没事做看什么网站自己建网站能赚钱吗
  • 中国沈阳网站在哪里下载怎么做微信小程序
  • 网站建设需要用到什么软件wordpress斌果主题
  • 网站建设为什么要推广重装wordpress
  • 推荐一本学做网站的书国外设计网站pinterest下载
  • 小程序api开发湖南seo推广多少钱
  • 网站建设10年后的目标少儿编程加盟教育机构
  • 重庆网站建设哪家公司那家好网站备案 影响吗
  • 山东新昌隆建设咨询有限公司网站网站开设作风建设专栏
  • 太原招聘网站开发外贸软件排行榜前十名
  • 做网站如何避免商标侵权设计数码产品宣传网站
  • 校园网站建设的困难建设一个网站要多少钱
  • 德阳市做网站上海城乡建设中级职称报名网站
  • flash网站建设教程视频网站底部版权信息格式
  • 免费开源的网站系统为什么我做的视频网站播放不了
  • 营销型网站设计服务商做游戏的网站的公司
  • 网上做图赚钱的网站河北省住房和城乡建设厅的网站
  • 长沙h5网站建设怎么做本地婚姻介绍网站
  • 智慧团建网站登录平台官网网站策划论文
  • html5手机网站开发经验wordpress 文章编辑插件
  • 网站建设的需要的工具企业seo报价表
  • 自助手机建站系统wordpress火车头插件防重复
  • 做网站用图片算侵犯著作权吗带数据库的网站