- PR -

ブラウザのタイムアウト時の動作について

投稿者投稿内容
でぽん
会議室デビュー日: 2003/05/14
投稿数: 3
投稿日時: 2003-05-15 17:07
いつも参考にさせていただいています。

いま勉強がてらWebアプリケーションの構築を
しています。
そのなかで理解不足なところあり悩んでいます。
ご存知の方、ご教授いただけないでしょうか。

--

ブラウザからのリクエストに対して、
あるWebアプリケーションで約10分の間、
サーバ側の処理が動きっぱなしとなる状態に
なったとします。

このとき、ブラウザ自身(IE5.5SP2以降)は
リクエストに対して5分間応答が無い場合、
タイムアウトと判断するようですが、その際に
リクエストが再送されるような動作が起こります。

Webアプリケーションはそれを処理しようとして、
こちらの意図しない結果になります。
それについては回避策を講じるつもりです。

基本的にはWebアプリケーションのお粗末さが
目に付くところであり、課題が多いのですが、
タイムアウトになった場合、ブラウザ側では
何を行おうとしているのでしょうか。

--

稚拙な文面で恐縮ですが、
よろしくお願いします。
zaxx_MD
大ベテラン
会議室デビュー日: 2003/04/21
投稿数: 204
お住まい・勤務地: 千葉県柏市
投稿日時: 2003-05-15 17:36
IEは30秒おきにリクエストをリトライします。
これはjava.net.HttpURLConnectionでも同じです。

ですからどんなWebApplicationも30秒以内に処理を終わらせるか
複数回のリクエストを想定してロジックを組む必要があります。
・Threadを生成する
・定期起動処理へロジックを移管する
・リクエストが2重かチェックする(ダブルクリック対策としても有効)
いずれかで対処できると思います。

[ メッセージ編集済み 編集者: zaxx_MD 編集日時 2003-05-15 17:48 ]
みやも
ベテラン
会議室デビュー日: 2002/04/22
投稿数: 74
投稿日時: 2003-05-16 00:56
>IEは30秒おきにリクエストをリトライします。

便乗質問で恐縮ですが、これって以下のどれでしょう?
・コネクション接続が30秒以上
・リクエストの送信に30秒以上
・レスポンスが返るまでに30秒以上

クライアントIEで、重たい処理に対して、
10分くらいかかっても、処理は正常に完了して、
画面も表示されるんですが、何かの設定の問題でしょうか?
(あるいは少しでもレスポンスを返せばよいとか)
zaxx_MD
大ベテラン
会議室デビュー日: 2003/04/21
投稿数: 204
お住まい・勤務地: 千葉県柏市
投稿日時: 2003-05-16 09:51
引用:

みやもさんの書き込み (2003-05-16 00:56) より:
・レスポンスが返るまでに30秒以上

(あるいは少しでもレスポンスを返せばよいとか)



そういうことです。
・レスポンスの応答がなくなってから30秒以上ですね。
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2003-05-16 10:14
unibon です。こんにちわ。

引用:

zaxx_MDさんの書き込み (2003-05-16 09:51) より:
・レスポンスの応答がなくなってから30秒以上ですね。


私は Java での Web アプリケーションの構築の経験はないのですが、
いままで Web アプリケーションの構築において、
私は 30秒という時間を意識したことはありませんでしたが、
とくに問題が生じたことはありませんでした。
ただし IE のデフォルトのタイムアウトは5分であり、
これは意識したことがありましたし、これには対処する必要がありました。

30秒というのは HTTP の Request/Response のレベルで、
そのようなやりとりがおこなわれるということでしょうか。
最初の Request の後、少なくともなにか Response が返れば、
上記の 5分まではひたすら待ったと思いますが、
そうではなく、最初の Request の後、まったく Response がなかった場合の話でしょうか。
それとも、もしかしたら、HTTP より下位のレイヤのことを指されているのでしょうか。
zaxx_MD
大ベテラン
会議室デビュー日: 2003/04/21
投稿数: 204
お住まい・勤務地: 千葉県柏市
投稿日時: 2003-05-16 13:50
引用:

unibonさんの書き込み (2003-05-16 10:14) より:
unibon です。こんにちわ。

最初の Request の後、少なくともなにか Response が返れば、
上記の 5分まではひたすら待ったと思いますが、
そうではなく、最初の Request の後、まったく Response がなかった場合の話でしょうか。



それでいけるかもしれません。
そういわれてみるとそういう結果になったかもしれません。
Requestを受信した直後にヘッダー+1バイトをフラッシュすれば5分間待ちつづける
かもしれませんね。間にキャッシュとかリバースプロキシーとかが挟まれてなければ。
少なくとも、コネクション接続とリクエストの送信は関係ありませんね。
 インフラによって動きが変わってくるので、設計ミスを小手先で誤魔化す
そういった実装を推奨するべきではありません。
会社員
ベテラン
会議室デビュー日: 2003/01/21
投稿数: 50
投稿日時: 2003-05-16 15:31
zaxx_MDさんはじめまして。
引用:

zaxx_MDさんの書き込み (2003-05-15 17:36) より:
IEは30秒おきにリクエストをリトライします。
これはjava.net.HttpURLConnectionでも同じです。

ですからどんなWebApplicationも30秒以内に処理を終わらせるか
複数回のリクエストを想定してロジックを組む必要があります。
・Threadを生成する
・定期起動処理へロジックを移管する
・リクエストが2重かチェックする(ダブルクリック対策としても有効)
いずれかで対処できると思います。

[ メッセージ編集済み 編集者: zaxx_MD 編集日時 2003-05-15 17:48 ]


「IEは30秒おきにリクエストをリトライします。」という話ははじめてききました。
まわりの人も聞いた事がないといっています。ためしにテストした所再現しません。
なにか設定が必要なのでしょうか?
また、どこにそのような情報があるのでしょうか?

<テスト方法>
クライアント Windows 2000 SP3/Internet Explorer 6 SP1
WEBサーバ Solaris 7 / iPlanet WEB server 4.1 SP9
snoopコマンドによりport 80のパケットを全て監視しましたが、何も送信されていません。
zaxx_MD
大ベテラン
会議室デビュー日: 2003/04/21
投稿数: 204
お住まい・勤務地: 千葉県柏市
投稿日時: 2003-05-16 16:21
引用:

会社員さんの書き込み (2003-05-16 15:31) より:
「IEは30秒おきにリクエストをリトライします。」という話ははじめてききました。
まわりの人も聞いた事がないといっています。ためしにテストした所再現しません。
なにか設定が必要なのでしょうか?
また、どこにそのような情報があるのでしょうか?


スレッドを全部呼んでください。
静的コンテンツでは再現することは難しいでしょう。

私も一部認識が違っていたのですが。
「リクエストの送信を完了してから30秒以内に
ヘッダーを含む1バイトもレスポンスが無い場合は
リトライとして再度リクエストを送信する」仕様のようです。

スキルアップ/キャリアアップ(JOB@IT)