2017-06-08 53 views
0

我正在更新Tomcat 9中conf/server.xml中的默认条目,以在1秒后请求超时,但未在浏览器中看到此更改的效果。Tomcat:在server.xml中设置connectionTimeout无效

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

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

我已经检查了server.xml中被设置connectionTimeouta(无效值),阅读和看关于日志此设置警告。此外,我通过发出命令catalina.bat start -config \conf\server.xml来确保使用所需的server.xml。

  1. 我是否有正确的属性(connectionTimeout)来设置请求的超时时间?
  2. 有什么我需要设置?
  3. 有没有办法让我检查在运行的Tomcat实例上connectionTimeout是否设置正确?

请让我知道。

+0

可能的重复https://stackoverflow.com/questions/7145131/tomcat-request-timeout – heenenee

+1

定义'请求超时1秒'和'超时请求'。 – EJP

回答

1

我不确定你想要做什么。您似乎想要在服务器回复请求所需的时间上设置超时时间。

那么大致情况:

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

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

现在,通常人们并没有真正设置响应超时,但消费者(在本例中为浏览器)设置超时。例如,我的浏览器设置了300秒的超时时间。我已经在文档中四处看了一下,你可能能够设置工人的回复超时时间,但是我没有测试过这个,我不确定它会工作。

更重要的是,您为什么要设置响应超时?在处理请求时可能需要很长时间才能完成一些调用(数据库,webservice,...)吗?在这种情况下,您应该设置该通话的超时时间。这将允许你记录一个错误,并立即给出500错误。如果你碰巧正在进行永久处理,那么你可能想要中断并停止进程并返回一个错误,并再次记录信息,以便知道错误发生的位置。总之,控制等待来自外部资源的反馈以及您的Web应用程序中的处理时间,而不是尝试在Web服务器上设置响应超时。

+0

谢谢!这解释了为什么我在步骤3和步骤4之间没有看到效果。 – apandit

+0

顺便说一下,我发现从发送请求到接收到响应的第一个字节后的60秒内发生了500次错误。我认为connectionTimeout正在为Tomcat踢脚。我试图通过将超时设置得非常低并且看看60秒间隔是否改变来验证这一点。 – apandit

+0

让我看看我是否正确理解这一点:您使用浏览器访问您的网站,60秒后出现500错误。由于这个错误,你试图改变connectionTimeout。这并没有解决问题,因此你的问题在stackoverflow。我正确地得到了吗?如果我理解正确,可能(其他原因可能)是由应用程序代码中未捕获的异常引起的。您应该能够在服务器日志中找到更多信息(取决于您如何设置日志记录)。默认的服务器日志位置是/var/log/tomcat6/catalina.out。 – HSquirrel

0

对于超过1秒的请求,状态将回到200。

那么,你似乎对这个设置的作用有一个错误的想法。从documentation

connectionTimeout
毫秒这个连接器将等待的数量,接受连接,用于请求URI行之后被呈现。

您写道:

[I]我没有看到在浏览器这个变化的影响。

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

在你定义'请求超时'的含义之前,我无法回答你的三个问题。

+0

您引用的文档还说“除非'disableUploadTimeout'设置为false,那么在读取”connectionTimeout'描述的请求主体(如果有)时也会使用此超时。因此,由于我没有将'disableUploadTimeout'设置为false,并且此属性默认为true,所以我期待Tomcat超时并在1秒后根据'connectionTimeout'设置生成500错误。 – apandit

+0

超时将不会发生,除非您在一秒钟内不发送任何内容。你如何防止浏览器做到这一点? – EJP

+0

那么,你是说Tomcat需要检测一个请求的传输中断超过1秒,以便我观察到超时发生? – apandit

相关问题