Tomcat: 在 server.xml 中设置 connectionTimeout 无效

Tomcat: Setting connectionTimeout in server.xml not effective

我正在更新 conf/server.xml 中的默认条目 Tomcat 9 以在 1 秒后请求超时,但我没有看到此更改的影响浏览器。

我希望在 F12 开发人员工具网络选项卡中看到 500 内部服务器错误,但在超过 1 秒的请求上状态返回为 200。

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="1000"
               redirectPort="8443" />

我已通过将 connectionTimeout 设置为 a(无效值)来检查是否正在读取 server.xml,并在日志中看到有关此设置的警告。此外,我通过发出命令 catalina.bat start -config \conf\server.xml.

来确保使用所需的 server.xml
  1. 我是否具有设置请求超时的正确属性 (connectionTimeout)?
  2. 我还需要设置什么吗?
  3. 有没有办法让我检查 运行 Tomcat 实例上的 connectionTimeout 设置是否正确?

请告诉我。

The status is coming back as 200 for the requests that take over 1 second.

所以呢?您似乎错误地理解了此设置的作用。来自 documentation:

connectionTimeout
The number of milliseconds this Connector will wait, after accepting a connection, for the request URI line to be presented.

您写道:

[I] am not seeing the effects of this change in the browser.

您可能无法在浏览器中看到此更改的效果,因为您无法控制浏览器在创建连接后显示请求 URI 行所需的时间。

在你定义你的意思之前我无法回答你的三个问题'timeout for a request'。

我不确定你到底想做什么。您似乎想为服务器回复请求的时间设置超时。

那么大概会发生什么:

  1. 浏览器与您的服务器建立 TCP 连接
  2. 浏览器发送html请求
  3. 您的服务器收到请求并开始处理它
  4. 您的服务器开始发送响应
  5. 您的服务器完成发送响应

据我所知,connectiontimeout是点1和点2之间发生的事情(同样,粗略地说,细节稍微复杂一些)。所以你的服务器的响应时间在这里并不重要。这只是浏览器与您的服务器建立连接和发送请​​求之间的时间。所以如果你想要基于你的服务器响应时间的东西,你就没有使用正确的属性。

现在,人们通常不会真正设置响应超时,而是由消费者(在本例中为浏览器)设置超时。例如,我的浏览器将超时设置为 300 秒。我仔细查看了文档,您也许可以为工作人员设置回复超时,但我还没有对此进行测试,我不确定它是否会起作用。

更重要的是,为什么要在响应上设置超时?在处理可能需要很长时间的请求时,您是否进行了一些调用(数据库、网络服务等)?在这种情况下,您应该只在该调用上设置超时。这将允许您记录错误并立即给出 500 错误。如果您碰巧一直在处理,您可能想要中断并停止该过程并 return 一个错误并再次记录信息,以便您知道哪里出错了。总之,控制等待来自外部资源的反馈和您在 Web 应用程序中的处理时间,而不是尝试在您的 Web 服务器上设置响应超时。