HTTPファイルアップロードはどのように機能しますか?質問する

HTTPファイルアップロードはどのように機能しますか?質問する

次のような簡単なフォームにファイルを添付して送信すると、

<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

詳細はここ

おすすめ記事