spring-mvc - 使用 Tomcat 或 Spring 检查请求中是否正确设置了内容长度 header

标签 spring-mvc tomcat servlets content-length

在更广泛的上下文中,我们想限制客户端可以通过 http post 请求发送到服务器的消息的大小。

我想通过使用 http header content-length 来做到这一点。 所以我不必阅读完整的主体,只需检查此 header ,并拒绝请求,如果内容长度太大,如果缺少内容长度也拒绝(http 411 错误代码)

所以我想确保消息正文的实际大小与请求的内容长度中设置的大小相同。

问题是 Tomcat 或 Spring MVC(我的堆栈)是否会验证内容长度是否实际上代表消息正文的实际大小?

(这应该很容易用过滤器实现,只是想知道 servlet 容器或 spring dispatcher servlet 是否不这样做开箱即用。)

最佳答案

Tomcat 处理它。

在一个带有案例的简单网络应用程序上进行了一些测试之后:

  1. 如果内容长度不存在,它将从内容中读取 0 个字节。
  2. 如果我们的内容比 content-lenght header 中提供的内容长,并且 keep-alive 为真,那么在读取内容长度的主体后,它将尝试将剩余的主体作为新请求处理(并且会失败有错误的请求)
  3. 在与第 2 点相同的情况下,只是 keep alive 为 false,我们仍然会收到与 content-length header 中长度相同的正文。

关于spring-mvc - 使用 Tomcat 或 Spring 检查请求中是否正确设置了内容长度 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37302866/

相关文章:

java - @ModelAttribute 像 Swagger 一样显示在 body 中

tomcat - 如何在 Apache tomcat 中使用 NTLM 功能?

tomcat - 谷歌计算引擎套接字问题

html - 在 Java Servlet 中生成 HTML 响应

java - Eclipse 中位置信息指定不正确

spring-mvc - 如何在Spring中处理泛型异常

java - Servlet PrintWriter 输出流真的需要关闭吗?

java - 无法使用 TomCat 将 MySQL Connector/J 与 Servlet 一起使用

java - 什么时候在 servlet 中调用 doPut()?

java - Spring Cloud Gateway 用于复合 API 调用?