• 締切済み

HTTPプロトコル POSTコマンドを中止させたい

ちょうどピッタリなカテゴリがなかったので、ここで質問させてください。 ブラウザからサーバに対してファイルをPOSTコマンドでアップロードする場面での話です。 一般的な手法としてformタグとinputタグ(type=file)を組み合わせてmultipart/formなenctypeでアップロードさせる方法を行っているのですが、サーバ側の都合でアップロードを途中でやめたくなった場合はどのような方法がありますか? やめたくなるタイミングはPOSTコマンド&ヘッダの送信中ではなく、ファイル本体をアップロードしているときです。例えば、サーバはブラウザからファイルを受け取り始めたけど、ファイルのサイズが大きすぎるとか何かの理由でサーバ側から止めたくなったら、どうすればよいか?ということです。 これは特定のサーバプラットフォームの話ではなくて、プロトコル上でどのような方法があるか、という回答をお待ちしています。 試しに、止めたくなったときにサーバ側からHTTPコネクションを切ってみました。確かにサーバ→ブラウザ方向へのコネクションは切れた(ハーフクローズ)ようですが、ブラウザ→サーバー方向のコネクションは切れずにブラウザは最後までファイルを送り続けました(chromeで確認)。 何か方法があればよろしくお願いします。

みんなの回答

  • suzukikun
  • ベストアンサー率28% (372/1325)
回答No.1

HTTPサーバから4xx系のエラーを返せば良いような気がしますが。 413か、416でどうでしょう?

参考URL:
http://www.asahi-net.or.jp/~ax2s-kmtn/ref/status.html
haniriito
質問者

お礼

早々のお返事、ありがとうございます。 413 Request Entity Too Largeエラーを返して、直後にコネクションを切っているのですが、やはりブラウザは送信を続けています。 WireSharkで確認したところ、413エラー+簡単なhtmlエラーメッセージを返した後、ブラウザはACKを返してきてシーケンス番号も進んでいるので受け取っているはずです。また、その直後にサーバからFINを出すと、ブラウザ側から+1されたシーケンス番号とACKを受け取っているので、ハーフクローズも完結していると思います。 それでも、ブラウザからはデータが出続けています。 ほかに何かお気づきのことがありましたら、よろしくお願いします。

関連するQ&A

  • enctype="multipart/form-data"

    アップローダーのHTMLで、FORMのタグに enctype="multipart/form-data"が必要なのはバイナリファイルをアップロードする時だけですか?

    • ベストアンサー
    • HTML
  • IIS6でmultipart/formdataがPOSTできない

    IIS6にてFORMのENCTYPEをmultipart/formdataにしてデータをPOSTすると、アクセス拒否となってしまうのですが、どうすればできますか? ActivePerl 5.8

  • formでファイルアップロードとテキストデータを送信したい

    JSPとServletでプログラムを作っております。 フォームで次のことをしたいと思っております。 1、DBにファイルをアップロードする。 2、DBにテキストデータを登録する。 この場合、 <form enctype = "multipart/form-data"> <form enctype = "text/plain"> を別個に指定できるのでしょうか? 出来ないとしたらどういう解決方法があるのでしょうか? 宜しくお願いいたします。

    • ベストアンサー
    • HTML
  • cgi.pm を使用してファイルUP時にtextエリア等の情報もcgiに引き渡す

    何度もPerlのところで質問していますが・・・今回は ファイルのアップロードをするときに少々もんだいが出てきてしまうことについてです。<input type="file"... を使います 以下の二つのファイルで構成しています(一部分だけ) ---form.html--- <form action="upload.cgi" method="POST" ENCTYPE="multipart/form-data"> <textarea name="input_textarea" rows="20" cols="70"></textarea> <input type="file" name="File" size=32> <input type-"submit" value="ok"> ---upload.cgi--- [formからの情報を配列変数に代入するスクリプト・・・] use CGI; $query = new CGI; $filename = $query->param('File'); # ファイル名の取得 $type = $query->uploadInfo($filename)->{'Content-Type'}; 同じファイル名が無いことを確認して、保存 という処理を行っています。upload.cgiの中身がとぼしくて申し訳ありません。 かなり省略してます。 さて、、問題となるのは ENCTYPE="multipart/form-data" とすると 配列変数にFORMからの情報がうまく入ってくれないということです、 かといってENCTYPE="multipart/form-data"を外すと CGI.pm を使った ファイルのアップロードができなくなってしまいます。 ENCTYPE="multipart/form-data" のオプションをつけて 配列変数にテキストエリアの内容を入れるにはどうすればいいのでしょうか。 テキストエリアを取り除くとファイルのアップロードはできます。 ただ、ファイルと入力したテキストを同時に処理することができないんです。

  • mailtoでバイナリーファイルを添付

    formタグのmailtoでバイナリーファイルを添付する方法を教えて下さい。 次の例だとテキストファイルは送信できますが、バイナリファイルは化けます。 <form method=post Action="mailto:xxxx@xxxx.co.jp" enctype="multipart/form-data"> <input type=file name=File maxlength=255> <input type=submit name=Submit> </form> 対象 OS Windows95以上 or NT4以上 ブラウザ IE4以上 or Netscape4以上

  • フォームのPOST情報が渡らない?

    こんにちは。 PHPを使ってフォームからの入力情報をPOSTで受け取り確認画面を出す、というような機能を作成しているのですが、たまにデータが受け取れずに初期画面へ戻ってしまう現象が起こります。 POSTではなくGETにするとキチンと送信出来ているようなのですが、情報量やその他の面からGETを使うことは避けたいと思っています。 POSTされた情報が受け取れないという現象は、再現が難しく、出るときは出るし出ないときはまったく出ません。 これまで調べた回避方法で以下の2つは試してみましたが、どちらも現象を止めるには至りませんでした。  ・<form>タグに『 enctype="multipart/form-data"』を追加する  ・<input type="hidden" name="spoof">を追加する また、マルチバイト文字をフォームに入力しない場合は、現象がまったく再現しないようでした。 この現象の回避策を何かご存知の方、アドバイスよろしくお願いいたします。 ------使用環境-------------- OS   :Windows2000 ブラウザ:Internet Explorer 6.0.2800.1106(更新バージョンSP1) Apache :Server version: Apache/1.3.29 (Unix) PHP   :PHP 4.3.4 (cli) (built: Dec 1 2003 18:13:50) ------POST情報取得処理------ function get_post_vers(){ foreach($_POST as $key => $val){ $GLOBALS["$key"] = $val; } return; }

    • ベストアンサー
    • PHP
  • Dojo1.2でAjaxのpostをしたい

    こんにちは。 Dojo1.2でAjaxのPostをしているのですが、値が受けわたっていきません。 ファイルアップロードをしているのですが、Fileを認識しません。 確認はIE6で行ってます。 ・呼び出し元 var param = new Object(); param['file'] = document.edit._file.value; ajaxPost("test.action", param); ... <form name="edit" enctype="multipart/form-data" method="post"> <input type="file" name="file" id="_file" size="50" maxlength="255" value=""/> </form> ・Ajax呼び出し function ajaxPost( rurl, parameters) {  dojo.xhrPost ({   url: rurl, //form: 'post-form',   parameters: parameters,   load: function (data) {   },   error: function (error) {    alert(error);   }  }); } このようにしていますが、どこが悪いのでしょうか?できればform=editで指定できれば良いのですが・・、エラーとなってしまう為、parameterとして格納したつもりです。 Action内には到達しているのですが、Fileを認識できていない状態です。(フレームワークはwebwork2を使ってますが、省略しました) お分かりになりましたら、よろしくお願いします。

  • POSTによるファイル・アップロード、ファイルが2回送信される。

    POSTによるファイル・アップロード、ファイルが2回送信される。 <form method="POST" action="file_up.cgi" enctype="multipart/form-data" target="_blank"><table width="650" border="0" cellspacing="3" cellpadding="3" bgcolor="#AAAAFF" align="center"> <tr align="center"><td colspan="2"><b>ファイル・アップロードのサンプル(実験中!)</b></td></tr> <tr><td align="right">ファイル名:</td><td align="left"><input type="file" name="NAME" style="background-color:aqua"></td></tr> <tr><td></td><td><input type="submit" value=" 送信 "><input type="reset" value="クリア"></td></tr></table></form></body></html> 参照ボタンでファイルを選択し、「送信」し、サーバー側でメッセージ・ボディーを見ると選択したファイルが2回送られてきています。 全く無駄な送信だと思うのですが、何か設定があるのでしょうか? それとも仕様でしょうか? 宜しくお願い致します。

    • ベストアンサー
    • HTML
  • アップロードの方法

    ファイルの保存方法を教えてください。 アップロードファイル名は取得できましたが、ファイルの保存法が分からないので教えてください。 PHPは知っています。 PHPのようにテンポラリファイルに保存されるからテンポラリのパスを取得するのでしょうか? ASPの場合だと方法がさっぱり分かりませんでした。 <form enctype="multipart/form-data" action="a.asp" method="POST"> <input name="my_file" type="file" size="20"></td> <input type="Submit"> </form>

  • SSLのページでエラーが発生します

    PHPで作成しているページなのですが、 通常(http)は問題なく動作するのですが、 SSL(https)にすると頻繁にエラーが発生します。 タイトル:サーバが見つかりません 内容:ページを表示できません の画面になります。 エラーが発生するページは、 ファイルのアップロード機能があるページのみで かなりの頻度で発生します。 アップロードは下記のようになっています。 <form name="xxx" method="post" action="xxx.php" enctype="multipart/form-data"> <input type="file" name="xxx"> </form> SSLでファイルをアップロードする場合、 何か特別なコーディングや注意点などがあるのでしょうか? 原因がさっぱりわからず困っています。 よろしくお願いします。

    • 締切済み
    • PHP

専門家に質問してみよう