[解決済み] HTTPファイルアップロードの仕組みを教えてください。
2022-03-15 18:36:35
質問
このような簡単なフォームにファイルを添付して送信した場合。
<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の内部動作が知りたいだけなんです。
どのように解決するのですか?
ファイルを選択してフォームを送信するとどうなるかを見てみましょう(簡潔にするためにヘッダーを切り捨てています)。
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
ヘッダを表示します。
詳細な内容は こちら .
関連
-
[解決済み】Android 8:クリアテキストのHTTPトラフィックが許可されない
-
[解決済み] HTTP GET(リクエストボディ付き
-
[解決済み] java.net.URLConnectionを使用してHTTPリクエストを発生させ処理する方法
-
[解決済み] HTTP POSTリクエストでは、どのようにパラメータが送信されるのですか?
-
[解決済み] updateとdeleteのHTTPステータスコード?
-
[解決済み] カスタムHTTPヘッダー:命名規則
-
[解決済み] HTTPでファイルをダウンロードするには?
-
[解決済み] cURL を使ってファイル付き POST データをアップロードする
-
[解決済み】HTTPのPOSTとPUTの違いは何ですか?
-
[解決済み] ブラウザがファイルのダウンロードを受信したことを検出する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] リソースを "アンキャッシュ" する
-
multipart/form-data と application/octet-stream, application/x-www-form-urlencoded の違いについて
-
[解決済み] HTTPヘッダーの大文字と小文字は区別されますか?
-
[解決済み] HTTPステータスコード0 - Error Domain=NSURLErrorDomain?
-
[解決済み] Cache-Control: max-age=0とno-cacheの違いは何ですか?
-
[解決済み】全てのブラウザで、Webページのキャッシュを制御するには?
-
[解決済み】enctype='multipart/form-data'とはどういう意味ですか?
-
[解決済み】AngularでHTTPリクエストにURL引数(クエリ文字列)を渡すには?
-
[解決済み】ダイジェスト認証とベーシック認証の違いは何ですか?
-
[解決済み] サーバーサイドでCookieを削除する正しい方法