- PR -

HTTPエラー408の対処法

1
投稿者投稿内容
がちゃぴん
会議室デビュー日: 2004/02/20
投稿数: 4
お住まい・勤務地: 東京・都内
投稿日時: 2004-02-20 14:05
WAS5.0.2で稼動しているJ2EEアプリケーションにおいて、
1日に数回、HTTPエラー408(request timeout)が発生します。
回線障害やクライアント側の問題もあるでしょうが、
アクセス数的には数人でも発生している状況です。
WASにおける設定やサーブレットにおいて、緩和させる手段や対応策は
ないのでしょうか?(タイムアウト値の設定があるならばその値を長くするとか)

なお、HTTPエラー408の発生状況がアプリケーションで発行している
ログに出力されているのですが、リクエストタイムアウトって
リクエストの処理後にでるものなのでしょうか?
単純に考えるとリクエストの受信が完了していないのなら、
リクエストを処理できないからアプリケーションまで制御が
行かなくて、ログにも出力されないと思ってしまうのですが・・・。

何かご存知の方がいましたら、御回答の程、宜しくお願いします。

以下、ログの内容です。
2003-12-25 11:57:23,812 INFO - サーブレットの最後の処理
2003-12-25 11:57:30,609 ERROR - F9999 null (←アプリで出力しているエラーコード)HTTP error code: 408
2003-12-25 11:57:30,609 ERROR - HTTP error code: 408
java.lang.RuntimeException: HTTP error code: 408
at com.ibm.ws.webcontainer.srt.SRTServletRequest.parseParameters(SRTServletRequest.java(Compiled Code))
at com.ibm.ws.webcontainer.srt.SRTServletRequest.getParameterNames(SRTServletRequest.java(Compiled Code))
at javax.servlet.ServletRequestWrapper.getParameterNames(ServletRequestWrapper.java(Compiled Code))
でゅうく
大ベテラン
会議室デビュー日: 2003/11/30
投稿数: 129
投稿日時: 2004-02-21 13:56
こんにちは。

引用:

未記入さんの書き込み (2004-02-20 14:05) より:
WASにおける設定やサーブレットにおいて、緩和させる手段や対応策は
ないのでしょうか?(タイムアウト値の設定があるならばその値を長くするとか)


KeepAlive のタイムアウト設定を長くするって事じゃないんですか?
WAS の事は知らないのですが、基本的な機能なので出来ると思いますよ。
タイムアウト値を長くしても解消するかはわかりませんが・・。

引用:

未記入さんの書き込み (2004-02-20 14:05) より:
なお、HTTPエラー408の発生状況がアプリケーションで発行している
ログに出力されているのですが、リクエストタイムアウトって
リクエストの処理後にでるものなのでしょうか?


HTTP/1.1 では、高速化のために接続を使い回す機能があります。(KeepAlive)
換言すれば、サーバは同一クライアントからのリクエストを一つの接続で処理しています。
つまり、クライアントが連続してリクエストを発行してくる場合に効果的な訳です。
408 は音沙汰の無いクライアントとの接続を破棄するって事で、別段気に止める必要は無いのだと思います。

HTTP の勉強を始めたばかりなので、ハズしているかもしれません。
その際は、ご容赦下さい。
skulker
常連さん
会議室デビュー日: 2003/11/13
投稿数: 41
投稿日時: 2004-02-21 15:25
HTTP 408とKeepAliveは関係ないでしょう。
例えばクライアントがソケット開いた後に何にもリクエスト送って来ないでいたりすると、
サーバはもう待てませんよ、と408を返してソケットをクローズします。

設定するなら、Webサーバか、WASのWebコンテナ→トランスポートでしょう。

[ メッセージ編集済み 編集者: skulker 編集日時 2004-02-21 15:25 ]
でゅうく
大ベテラン
会議室デビュー日: 2003/11/30
投稿数: 129
投稿日時: 2004-02-21 16:15
やっぱしハズしてましたか・・。

浅知恵で書き込みすると混乱の元になりますね・・・。
ご迷惑お掛けしました。ゴメンなさい。

KeepAlive でタイムアウトしたとしてもエラーではないから当然無関係ですよね。
今考えてみると、なんでそう思ったのだろう・・・。

[ メッセージ編集済み 編集者: でゅうく 編集日時 2004-02-21 17:04 ]
がちゃぴん
会議室デビュー日: 2004/02/20
投稿数: 4
お住まい・勤務地: 東京・都内
投稿日時: 2004-02-24 16:09
このスレッドの提起者です。
でゅうくさん、skulkerさん、御回答ありがとうございます。

ソケット等についての知識が全く無かったので、ネット上を調べましたが、

skulkerさんの引用
>例えばクライアントがソケット開いた後に何にもリクエスト送って来ないでいたりすると、
>サーバはもう待てませんよ、と408を返してソケットをクローズします。

これはクライアント側がブラウザからアプリケーションのボタンを押下し、
サブミットしてリクエストを送信後に発生することでしょうか?
その場合、原因としては以下の事象があり得るということでしょうか?

1.リクエストが最後まで受信しきれなかった
  ソケットビジーとか?
2.アプリケーションのボタン押下の際、2度押しを行いリクエストが
  複数送信されたことによる弊害

また、対処法としてHTTPエラー408が発生した場合、前画面に戻って、
再度、同じ操作によってリクエストを送信して処理することは可能、又は
一般的でしょうか?

何かご存知の方がいましたら、御回答の程、宜しくお願いします。
永井和彦
ぬし
会議室デビュー日: 2002/07/03
投稿数: 276
お住まい・勤務地: 東京都
投稿日時: 2004-02-25 17:00
引用:

>例えばクライアントがソケット開いた後に何にもリクエスト送って来ないでいたりすると、
>サーバはもう待てませんよ、と408を返してソケットをクローズします。

これはクライアント側がブラウザからアプリケーションのボタンを押下し、
サブミットしてリクエストを送信後に発生することでしょうか?
その場合、原因としては以下の事象があり得るということでしょうか?

1.リクエストが最後まで受信しきれなかった
  ソケットビジーとか?
2.アプリケーションのボタン押下の際、2度押しを行いリクエストが
  複数送信されたことによる弊害

また、対処法としてHTTPエラー408が発生した場合、前画面に戻って、
再度、同じ操作によってリクエストを送信して処理することは可能、又は
一般的でしょうか?



http://apple.kiss.kokushikan.ac.jp/wwwadmin/manual/AlertsandErrors.htm#408

ざっと検索してみたんですが、Httpのレスポンスに関しては上記ページなんかが分かりやすいかも知れません。

引用:

クライントは、サーバーが設定した待ち時間以内にリクエストを完了できませんでした。 クライアントは、同じリクエストをしばらくしてから繰り返すことができます。



とのことなので、再送信するのは問題無いようです。まあ、回線障害等の外部要因で失敗したのでなければ、再送信しても再びタイムアウトするだけだとは思いますが……。

以前検索した際に
「WAS3で大きなファイルをアップロードすると408になる。他のApに変えてやってみたら問題無く完了出来た。Time-Outパラメータが怪しいと思い数値を変更して試したが状況改善せず」というような投稿を見掛けた気がしますので、その辺りの角度から調べられると見付かるかも知れません。
がちゃぴん
会議室デビュー日: 2004/02/20
投稿数: 4
お住まい・勤務地: 東京・都内
投稿日時: 2004-02-25 17:31
永井和彦さん、御回答ありがとうございます。
参考ページまで示して頂き、ありがとうございます。

[参考ページのHTTPエラー408の解説]
>408 Request Timeout
>クライントは、サーバーが設定した待ち時間以内にリクエストを完了できませんでした。
>クライアントは、同じリクエストをしばらくしてから繰り返すことができます。

私も同様のページを複数見て回りましたが、HTTPエラー408に関してはそのまんま
リクエストタイムアウトだとしか書いていないところが多く、対処法まで書いているところは
少なかったです。対処法としては、上記を踏まえて以下を行ってみようと思っています。

【対処法】
 1.WEBサーバ又はAPサーバのリクエストタイムアウト値(?)が、
   アプリの処理要件と照らし合わせて短いのであれば長く設定する。
 2.HTTPエラー408を検知した場合に、前画面に戻ってリトライを促すメッセージを
   表示し、リトライ可能なようにアプリケーションを組む。
   (実際にリトライした結果、正常に処理が可能かどうか確認する)
 
あ、そういえばこの現象の発生する時のことを1つ書き忘れていましたが、
特定の処理のところでおきるというわけではないのです。
いろんな個所で発生し、大した処理を行っていないところでも発生します。
がちゃぴん
会議室デビュー日: 2004/02/20
投稿数: 4
お住まい・勤務地: 東京・都内
投稿日時: 2004-03-03 13:21
自己レスします。

引用:

がちゃぴんさんの書き込み (2004-02-25 17:31) より:
【対処法】
 1.WEBサーバ又はAPサーバのリクエストタイムアウト値(?)が、
   アプリの処理要件と照らし合わせて短いのであれば長く設定する。
 2.HTTPエラー408を検知した場合に、前画面に戻ってリトライを促すメッセージを
   表示し、リトライ可能なようにアプリケーションを組む。
   (実際にリトライした結果、正常に処理が可能かどうか確認する)



上記、対処法の2を実装した結果、実際にHTTPエラー408が発生して、
その旨を示すエラー画面にメッセージが表示されました。
つまり、HTTPエラー408の検知を行うことはできました。

また、その後のリトライ操作では、HTTPエラー408は発生することなく、
目的の処理要求が正しく処理することができました。

HTTPエラー408の抑制をすることではありませんが、リカバリー処理として
とりあえずは有効であることがわかりましたので、報告させて頂きます。
1

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