当服务器端进程发送响应的时间太长时,tomcat 请求连接是否也会超时?
Will a tomcat request connection also time out when a server side process is taking too long to send a response?
我有一个带有嵌入式 tomcat 服务器的 spring 启动应用程序。为了限制 DOS 攻击的影响,我将 属性 server.tomcat.connection-timeout
设置为 3 秒。 connectionTimeout
是 .
之后的时间限制
因此,如果在我的情况下客户端需要超过 3 秒来完成请求,连接将自动超时。但是,我还不清楚究竟发生了什么,而是服务器端的一个进程导致了延迟。
举个例子,我的 Web 应用程序正在使用管理数据库连接的 hikari 连接池。它最多可以有 10 个数据库连接。如果所有 10 个都在使用,则任何传入请求都必须等待其中一个数据库连接可用。如果等待时间超过 3 秒,tomcat 连接会超时吗?或者由于延迟不是由客户端引起的,连接是否仍然可用?
谢谢
根据Tomcat 9.0 documentation,connection-timeout
是:
The number of milliseconds this Connector will wait, after accepting a connection, for the request URI line to be presented. [...] Unless disableUploadTimeout
is set to false
, this timeout will also be used when reading the request body (if any).
这是客户端发送请求所花费的时间。这与服务器响应请求的时间无关。
所以...
If this wait takes more then 3 seconds, will the tomcat connection time out?
不,不会1。事实上,Tomcat 似乎对(同步)请求可能需要多长时间才能完成没有任何限制。
当然,如果服务器花费的时间太长,客户端可以使请求超时。服务器不太可能会注意到这一点,因此它可以放弃请求。
1 - 假设文档是准确的。但是,该配置选项已出现在多个 Tomcat 版本中,具有相同的描述。如果文档有误,肯定会注意到、报告并修复。
我有一个带有嵌入式 tomcat 服务器的 spring 启动应用程序。为了限制 DOS 攻击的影响,我将 属性 server.tomcat.connection-timeout
设置为 3 秒。 connectionTimeout
是
因此,如果在我的情况下客户端需要超过 3 秒来完成请求,连接将自动超时。但是,我还不清楚究竟发生了什么,而是服务器端的一个进程导致了延迟。
举个例子,我的 Web 应用程序正在使用管理数据库连接的 hikari 连接池。它最多可以有 10 个数据库连接。如果所有 10 个都在使用,则任何传入请求都必须等待其中一个数据库连接可用。如果等待时间超过 3 秒,tomcat 连接会超时吗?或者由于延迟不是由客户端引起的,连接是否仍然可用?
谢谢
根据Tomcat 9.0 documentation,connection-timeout
是:
The number of milliseconds this Connector will wait, after accepting a connection, for the request URI line to be presented. [...] Unless
disableUploadTimeout
is set tofalse
, this timeout will also be used when reading the request body (if any).
这是客户端发送请求所花费的时间。这与服务器响应请求的时间无关。
所以...
If this wait takes more then 3 seconds, will the tomcat connection time out?
不,不会1。事实上,Tomcat 似乎对(同步)请求可能需要多长时间才能完成没有任何限制。
当然,如果服务器花费的时间太长,客户端可以使请求超时。服务器不太可能会注意到这一点,因此它可以放弃请求。
1 - 假设文档是准确的。但是,该配置选项已出现在多个 Tomcat 版本中,具有相同的描述。如果文档有误,肯定会注意到、报告并修复。