web-dev-qa-db-ja.com

JavaサーブレットコンテナにHttpリクエストタイムアウトパラメータを指定する方法

私のサーブレット(またはすべてのサーブレット)に到着するすべてのリクエストのリクエストタイムアウトをどこで設定できるかを理解しようとしていますか?私が思うに、それはコンテナプロパティですか?また、これはさまざまなブラウザにどのように影響しますか?それらはすべて、コンテナが指定するパラメータに準拠していますか?あるいは、リクエストのタイムアウト時間は私が制御できるものではなく、各ブラウザが独自にこれを決定するのでしょうか? (明確にするために、セッションタイムアウトについて話しているのではありません)

23
Ittai

クライアントからのタイムアウト(つまり、HTTPリクエストへの応答を待つ時間)は、クライアントで決定されます。 IEについては this を、Firefoxについては this を参照してください。

サーバーからこのタイムアウトを制御することはできません。

14
Vinay Sajip

クライアントのタイムアウトを制御することはできませんが、サーバーを非常にせっかちにすることができます:)たとえば、Tomcatでは、コネクタでこれを行うことができます。

<Connector port="8080"  
  ...
  connectionTimeout ="5000"
  disableUploadTimeout="false" />

これにより、サーバーは5秒だけ待機し、接続を閉じます。ブラウザーは接続クローズエラーを受け取ります。クライアントのタイムアウトと同じように扱うことができます。

もちろん、これはタイムアウトがサーバーによって引き起こされた場合にのみ機能し、ブラウザとサーバー間の接続の問題ではありません。

7
ZZ Coder

サーバーからクライアントのタイムアウトを制御することはできません。ただし、長時間実行されている操作がビジーな間、時々クライアントにデータを送り返すことができる場合があります。これにより、クライアントのタイムアウトが防止され、ユーザーなどに進行状況を表示するために使用できます。応答から取得したOutputStreamまたはWriterにデータを書き込み、flushを呼び出して部分的なデータをクライアントに送信します。

2
David Tinker