次のような簡単なフォームにファイルを添付して送信すると、
<form enctype="multipart/form-data" action="http://localhost:3000/upload?upload_progress_id=12344" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="100000" />
Choose a file to upload: <input name="uploadedfile" type="file" /><br />
<input type="submit" value="Upload File" />
</form>
ファイルは内部的にどのように送信されるのでしょうか? ファイルは HTTP 本文の一部としてデータとして送信されますか? このリクエストのヘッダーには、ファイル名に関連するものは何も表示されません。
ファイルを送信する際の HTTP の内部動作を知りたいだけです。
ベストアンサー1
ファイルを選択してフォームを送信すると何が起こるかを見てみましょう (簡潔にするためにヘッダーは省略しています)。
POST /upload?upload_progress_id=12344 HTTP/1.1
Host: localhost:3000
Content-Length: 1325
Origin: http://localhost:3000
... other headers ...
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryePkpFF7tjBAqx29L
------WebKitFormBoundaryePkpFF7tjBAqx29L
Content-Disposition: form-data; name="MAX_FILE_SIZE"
100000
------WebKitFormBoundaryePkpFF7tjBAqx29L
Content-Disposition: form-data; name="uploadedfile"; filename="hello.o"
Content-Type: application/x-object
... contents of file goes here ...
------WebKitFormBoundaryePkpFF7tjBAqx29L--
注意: 各境界文字列には、最後の境界文字列の末尾と同様に、追加の をプレフィックスとして付ける必要があります--
。上記の例にはすでにこれが含まれていますが、見落としやすい場合があります。以下の @Andreas のコメントを参照してください。
フォーム パラメータを URL エンコードする代わりに、フォーム パラメータ (ファイル データを含む) は、リクエストの本文内のマルチパート ドキュメントのセクションとして送信されます。
上記の例では、MAX_FILE_SIZE
フォームに値が設定された入力と、ファイル データを含むセクションを確認できます。ファイル名はヘッダーの一部ですContent-Disposition
。
詳細はここ。