You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot如何限制application/octet-stream请求体大小?

问题与解决方案:限制application/octet-stream请求体大小

问题背景

我正在开发一个通过HTTP POST请求接收文件的服务,文件以请求体形式发送,请求头为Content-Type: application/octet-stream,希望将请求体大小限制为10MB。使用的代码示例如下:

@RestController
public class MyController {

    @PostMapping("save")
    public ResponseEntity<Map<String, Object>> save(@RequestBody byte[] data) {
        return ResponseEntity.ok(Map.of("size", data.length));
    }
}

测试用的curl命令:

curl -X POST -H "Content-Type: application/octet-stream" --data-binary "@my_big_binary_file.whatever" http://localhost:8080/save

尝试过以下配置但未生效:

server.tomcat.max-http-form-post-size=10MB
server.tomcat.max-swallow-size=10MB

需求是让所有此类请求的大小都被限制为10MB,同时想了解这两个配置的作用是否符合预期。测试环境为Java 17,Spring Boot版本2.7.9和3.0.4。

正确的请求体大小限制方案

方案1:全局配置(适用于所有端点)

在application.properties或application.yml中添加以下配置:

server.max-http-request-size=10MB

这个配置是Spring Boot 2.0+提供的全局请求体大小限制,对所有Content-Type的HTTP请求生效,包括application/octet-stream,超过10MB的请求会直接被拦截,返回413(Payload Too Large)状态码。

方案2:单个端点精细控制

如果只需要限制特定端点的请求体大小,可以使用@RequestSize注解(Spring Boot 2.6及以上版本支持):

@RestController
public class MyController {

    @PostMapping("save")
    public ResponseEntity<Map<String, Object>> save(@RequestBody @RequestSize(max = "10MB") byte[] data) {
        return ResponseEntity.ok(Map.of("size", data.length));
    }
}

当请求体超过10MB时,会抛出PayloadTooLargeException,Spring Boot会自动转换为413响应。

关于你尝试的两个Tomcat配置

  • server.tomcat.max-http-form-post-size:仅针对application/x-www-form-urlencoded类型的表单POST请求生效,也就是普通的键值对表单提交,和你的application/octet-stream请求完全不相关,所以设置后不会有效果。
  • server.tomcat.max-swallow-size:这个配置不是用来限制请求体大小的,它的作用是当请求被Tomcat拒绝(比如超过大小限制)后,控制Tomcat是否继续读取剩余的请求体数据。默认值为2MB,设置为-1表示不限制读取剩余数据。它和你的请求体大小限制需求无关。

内容的提问来源于stack exchange,提问作者Marcelo Barros

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 17:20:17