大人になっても苦手な食べ物、ありますか?

ちょうどピッタリなカテゴリがなかったので、ここで質問させてください。

ブラウザからサーバに対してファイルをPOSTコマンドでアップロードする場面での話です。
一般的な手法としてformタグとinputタグ(type=file)を組み合わせてmultipart/formなenctypeでアップロードさせる方法を行っているのですが、サーバ側の都合でアップロードを途中でやめたくなった場合はどのような方法がありますか?

やめたくなるタイミングはPOSTコマンド&ヘッダの送信中ではなく、ファイル本体をアップロードしているときです。例えば、サーバはブラウザからファイルを受け取り始めたけど、ファイルのサイズが大きすぎるとか何かの理由でサーバ側から止めたくなったら、どうすればよいか?ということです。

これは特定のサーバプラットフォームの話ではなくて、プロトコル上でどのような方法があるか、という回答をお待ちしています。
試しに、止めたくなったときにサーバ側からHTTPコネクションを切ってみました。確かにサーバ→ブラウザ方向へのコネクションは切れた(ハーフクローズ)ようですが、ブラウザ→サーバー方向のコネクションは切れずにブラウザは最後までファイルを送り続けました(chromeで確認)。

何か方法があればよろしくお願いします。

A 回答 (1件)

HTTPサーバから4xx系のエラーを返せば良いような気がしますが。


413か、416でどうでしょう?

参考URL:http://www.asahi-net.or.jp/~ax2s-kmtn/ref/status …
    • good
    • 0
この回答へのお礼

早々のお返事、ありがとうございます。

413 Request Entity Too Largeエラーを返して、直後にコネクションを切っているのですが、やはりブラウザは送信を続けています。

WireSharkで確認したところ、413エラー+簡単なhtmlエラーメッセージを返した後、ブラウザはACKを返してきてシーケンス番号も進んでいるので受け取っているはずです。また、その直後にサーバからFINを出すと、ブラウザ側から+1されたシーケンス番号とACKを受け取っているので、ハーフクローズも完結していると思います。
それでも、ブラウザからはデータが出続けています。

ほかに何かお気づきのことがありましたら、よろしくお願いします。

お礼日時:2012/07/27 18:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報