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

时间:2017-06-08 14:07:21

标签: tomcat server.xml

我正在更新Tomcat 9中conf / server.xml中的默认条目,以便在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吗?
  4. 请告诉我。

2 个答案:

答案 0 :(得分:1)

我不确定你到底要做什么。您似乎希望在服务器回复请求所花费的时间设置超时。

大致发生了什么:

  1. 浏览器设置与服务器的TCP连接
  2. 浏览器发送html请求
  3. 您的服务器收到请求并开始处理
  4. 您的服务器开始发送回复
  5. 您的服务器完成发送回复
  6. 据我所知,connectiontimeout是第1点和第2点之间发生的事情(粗略地说,细节稍微复杂一些)。因此,服务器的响应时间与此无关。它只是浏览器与服务器建立连接和发送请​​求之间的时间。因此,如果您需要基于服务器响应时间的内容,则表明您没有使用正确的属性。

    现在,通常,人们并没有真正设置响应的超时,但是消费者(在这种情况下是浏览器)会设置超时。例如,我的浏览器设置超时为300秒。我已经在文档中查了一下,你可能会对工作人员设置回复时间,但我还没有对此进行测试,我不确定它是否可行。

    更重要的是,为什么要在响应上设置超时?在处理可能需要很长时间的请求时,是否有一些调用(数据库,Web服务,...)?在这种情况下,您应该只在该呼叫上设置超时。这将允许您记录错误,并立即给出500错误。如果您恰好正在永远处理,您可能想要中断并停止该过程并返回错误并再次潜在地记录信息,以便您知道它出错的地方。总之,控制等待外部资源的反馈和Web应用程序中的处理时间,而不是尝试在Web服务器上设置响应超时。

答案 1 :(得分:0)

  

对于超过1秒的请求,状态将恢复为200.

所以?您似乎对此设置的作用有误。来自documentation

  

connectionTimeout
  接受连接后,此连接器将等待呈现请求URI行的毫秒数。

您写道:

  

[我]没有在浏览器中看到此更改的影响。

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

在你通过'超时请求'来定义你的意思之前,我无法回答你的三个问题。

相关问题