【问题标题】: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 秒。 connectionTimeoutserver 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 documentationconnection-timeout 是:

    此连接器在接受连接后将等待显示请求 URI 行的毫秒数。 [...] 除非 disableUploadTimeout 设置为 false,否则在读取请求正文(如果有)时也会使用此超时。

    这是客户端发送请求所花费的时间。这与服务器响应请求所需的时间无关

    所以...

    如果这个等待时间超过 3 秒,tomcat 连接会超时吗?

    不,它不会1。事实上,Tomcat 似乎对完成(同步)请求可能需要多长时间没有任何限制。

    当然,如果服务器花费的时间过长,客户端可能会使请求超时。服务器不太可能注意到这一点,因此它可以放弃请求。


    1 - 假设文档是准确的。但是,该配置选项已存在于许多 Tomcat 版本中,具有相同的描述。如果文档有误,这肯定会被注意到、报告和修复。

    【讨论】:

      猜你喜欢
      • 2014-07-04
      • 1970-01-01
      • 2017-02-12
      • 2020-08-27
      • 2013-11-20
      • 2018-05-22
      • 2013-05-24
      • 1970-01-01
      • 2020-11-16
      相关资源
      最近更新 更多