Spring Boot中的 max-http-header-size配置
1. 概述
默认情况下,Spring Boot Web 应用程序包括一个预配置的嵌入式 Web 服务器。但是,在某些情况下,我们希望修改默认配置以满足自定义要求。
在本教程中,讲解如何在 Spring Boot 2.x 应用程序的application.properties文件中对请求标头进行设置和使用max-http-header-size属性。
2. Max-HTTP-Header-Size
Spring Boot 支持Tomcat、Undertow和Jetty作为嵌入式服务器。通常,我们在 Spring Boot 应用程序中的application.properties文件或application.yaml文件中进行服务器配置。
大多数 Web 服务器都有自己的一组 HTTP 请求header大小限制。HTTP header值受服务器实现的限制。在 Spring Boot 应用程序中,最大 HTTP header大小是使用server.max-http-header-size 配置的。
Tomcat和Jetty的实际默认值为8kB,Undertow的默认值为1MB。
要修改最大 HTTP header大小,在application.properties文件中进行如下配置:
server.max-http-header-size=20000
application.yaml中的格式:
server: max-http-header-size: 20000
从 Spring Boot 2.1 开始,可使用DataSize可解析值:
server.max-http-header-size=10KB
3.请求头太大
假设发送的请求的总 HTTP header大小大于max-http-header-size值。服务器以“400 Bad request”错误拒绝请求。在下一个示例中,我们将在日志文件中看到此错误。
让我们创建一个控制器,它有一个名为 token 的header属性:
@RestController @RequestMapping(value = "/request-header-test") public class MaxHttpHeaderSizeController { @GetMapping public boolean testMaxHTTPHeaderSize(@RequestHeader(value = "token") String token) { return true; } }
接下来,让我们向application.properties文件添加一些属性:
## Server connections configuration server.tomcat.threads.max=200 server.connection-timeout=5s server.max-http-header-size=8KB server.tomcat.max-swallow-size=2MB server.tomcat.max-http-post-size=2MB
当我们在token中传递一个大小大于 8kb的字符串值时,得到 400 错误,如下所示:
在日志中,我们看到以下错误:
19:41:50.757 [http-nio-8080-exec-7] INFO o.a.coyote.http11.Http11Processor - Error parsing HTTP request header Note: further occurrences of HTTP request parsing errors will be logged at DEBUG level. java.lang.IllegalArgumentException: Request header is too large ...
4. 解决方案
可以根据需要增加application.properties文件中max-http-header-size属性的值。
在上面的程序中,可以将它的值从默认的 8kb 升级到 40KB,这样问题就解决了。
server.max-http-header-size=40KB
现在,服务器将处理请求并发送回 200 响应,如下所示:
因此,只要标头大小超过服务器列出的默认值,我们就会看到服务器返回 400-Bad 请求,并显示错误“请求标头太大”。我们必须覆盖应用程序配置文件中的max-http-header-size值以匹配请求标头长度,如我们在上面的示例中所见。
通常,请求标头可能会变得太大,例如,由于加密而使用的令牌很长。
5. 结论
在本教程中,我们学习了如何在 Spring Boot 应用程序的应用程序配置文件中使用max-http-header-size属性。
然后,我们看到了当传递超过这个大小的header时会发生什么,以及如何在我们的application.properties 中增加max-http-header-size 的大小。
关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台
除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接
本文链接:http://choupangxia.com/2021/07/22/spring-boot%e4%b8%ad-max-http-header-size/