【问题标题】:Will a tomcat request connection also time out when a server side process is taking too long to send a response?当服务器端进程发送响应时间过长时,tomcat 请求连接也会超时吗?
【发布时间】:2022-01-15 01:38:22
【问题描述】:
我有一个带有嵌入式 tomcat 服务器的 spring boot 应用程序。为了限制 DOS 攻击的影响,我将属性 server.tomcat.connection-timeout 设置为 3 秒。 connectionTimeout 是server will automatically close the connection with the client 之后的时间限制。
因此,如果在我的情况下,客户端需要 3 秒以上才能完成请求,则连接将自动超时。但是,我还不清楚当服务器端的进程导致延迟时到底会发生什么。
举个例子,我的 Web 应用程序正在使用一个 hikari 连接池来管理与数据库的连接。它最多可以有 10 个数据库连接。如果所有 10 个都在使用中,则任何传入请求都必须等待其中一个数据库连接可用。如果这个等待时间超过 3 秒,tomcat 连接会超时吗?还是连接仍然可用,因为延迟不是由客户端引起的?
谢谢
【问题讨论】:
标签:
java
spring-boot
tomcat
connection-timeout
embedded-tomcat-8
【解决方案1】:
根据Tomcat 9.0 documentation,connection-timeout 是:
此连接器在接受连接后将等待显示请求 URI 行的毫秒数。 [...] 除非 disableUploadTimeout 设置为 false,否则在读取请求正文(如果有)时也会使用此超时。
这是客户端发送请求所花费的时间。这与服务器响应请求所需的时间无关。
所以...
如果这个等待时间超过 3 秒,tomcat 连接会超时吗?
不,它不会1。事实上,Tomcat 似乎对完成(同步)请求可能需要多长时间没有任何限制。
当然,如果服务器花费的时间过长,客户端可能会使请求超时。服务器不太可能注意到这一点,因此它可以放弃请求。
1 - 假设文档是准确的。但是,该配置选项已存在于许多 Tomcat 版本中,具有相同的描述。如果文档有误,这肯定会被注意到、报告和修复。