- PR -

サーブレット上で、ブラウザからの入力ストリームを中断する

1
投稿者投稿内容
みーむ
ベテラン
会議室デビュー日: 2003/10/13
投稿数: 56
投稿日時: 2006-09-26 14:12
お世話になります。

サーブレット上で、ブラウザからの入力ストリームを中断して、
レスポンスをブラウザに返したいのですが、そのようなことは
可能でしょうか?

content-lengthが大きなリクエストの場合に、エラー画面に
飛ばしたいのですが、どのように実装どなたか教えていただけ
ないでしょうか。
小僧
ぬし
会議室デビュー日: 2002/08/14
投稿数: 526
投稿日時: 2006-09-26 14:20
HTTPステータス413(Request Entity Too Large)をレスポンスすれば
いいのではないですかね。サーバ側からコネクションリセット掛ける
と、ブラウザ自身がサーバにコネクションリセットされましたという
類のエラーメッセージ表示したりしそうですが。
みーむ
ベテラン
会議室デビュー日: 2003/10/13
投稿数: 56
投稿日時: 2006-09-26 14:58
小僧さん。

早速のアドバイス、ありがとうございます。

ステータス413を返す処理を実装してみましたが、
この信号がブラウザに送られるのは、
ブラウザからの入力が終わってからなのか、
結局ブラウザからの大きなデータ送信を中断することが
できませんでした。

入力ストリームをサーバサイドでclose()したりもして、
試行錯誤していますが、ブラウザからの送信を中断できずに
います。取り急ぎ、ご報告まで。

また、心当たりなどありましたら、どうぞお願いいたします。

山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-09-26 15:31
Webサーバやアプリケーションサーバ側の設定にそういったパラメータがあるかもしれませんね。
・WebLogic Server 9.2 - Web サーバ機能のコンフィグレーション - POST サービス拒否攻撃の防止
http://edocs.beasys.co.jp/e-docs/wls/docs92/config_wls/web_server.html#wp1059784
みーむ
ベテラン
会議室デビュー日: 2003/10/13
投稿数: 56
投稿日時: 2006-09-26 16:16
インギさん。

アドバイス有難うございます。

そう、ちょうど教えていただいたURLのような処理を
サーブレットにて実装したいと考えています。
その容量を動的に制御したため、サーブレット上で
実装したいと考えています。

また、心当たりなどありましたら、どうぞお願いいたします。
K
大ベテラン
会議室デビュー日: 2004/04/07
投稿数: 174
投稿日時: 2006-09-26 16:41
ブラウザは既にデータ送り始めているので全部読み取ってあげないとレスポンスを正常に受け取れないと思います。
自前で実装するのであれば、制限値を超えるデータについてはメモリ上に確保せずに捨て、その後にHTTPステータス413(Request Entity Too Large)をレスポンスすればよいと思います。
みーむ
ベテラン
会議室デビュー日: 2003/10/13
投稿数: 56
投稿日時: 2006-09-26 17:08
mogeさん。

アドバイス、ありがとうございます。

ブラウザは送信を完了しない限り、レスポンスを受け取っては、
くれないのですね。勉強になります。
ブラウザ側の送信を中断し、適切なページに転送したいと
思っているのですが、そもろも無理な内容なのかなも
知れませんね。

もう少し、試行錯誤してみます。

また、心当たりなどありましたら、どうぞお願いいたします。

K
大ベテラン
会議室デビュー日: 2004/04/07
投稿数: 174
投稿日時: 2006-09-26 19:01
引用:

ブラウザ側の送信を中断し、適切なページに転送したいと
思っているのですが、そもろも無理な内容なのかなも
知れませんね。


転送を中断しなければいけない理由はなんでしょうか?
大量データの送信によるサービス拒否等の対策であれば、先ほど書いたように単に読み捨てるだけである程度(少なくともOutOfMemoryは)は避けられると思います。
上記の対応でもサーバ側のCPU時間は当然消費されるので、それも避けたいのであれば適切なページを応答することは諦めて即座にcloseするしかないように思います。
1

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