Closed9

multipart/form-dataを見ていく

bayamasabayamasa

MIME type (Multipurpose Internet Mail Extensions) 別名メディアタイプ
文書、ファイル、バイト列の性質や形式を示す標準。RFC6838で定義されている。

単純なMIMEタイプはタイプサブタイプで構成されて、間に/が入ることでMIMEタイプを構成する
タイプ/サブタイプ

bayamasabayamasa

タイプには個別型(discrete)とマルチパート型(multipart)の二種類が存在する。
個別型は単一のファイルまたはメディアを表すタイプ。
マルチパート型は複数のコンポーネントによって構成される文書を表すもので、それぞれの部分が固有のMIMEタイプを持つ

bayamasabayamasa

multipart/form-data

multipart/form-data タイプは入力済みのhtmlフォームの内容をブラウザからサーバーに送信する事ができます

multipart/form-dataはCRLF、「-」、「boundary」パラメーターの値を使用して構築された境界区切り文字で区切られる。

具体例

------------XnJLe9ZIbbGUYtzPQJ16u1
Content-Disposition: form-data; name="title"

title1
------------XnJLe9ZIbbGUYtzPQJ16u1
Content-Disposition: form-data; name="description"

description1
------------XnJLe9ZIbbGUYtzPQJ16u1
Content-Disposition: form-data; name="stream_id"

1019900359
------------XnJLe9ZIbbGUYtzPQJ16u1
Content-Disposition: form-data; name="item_images[]"; filename="sample.png"
Content-Type: image/png
Content-Length: 4323

{ Put binary contents that you want to upload }

ここの部分が境界区切り文字となる
------------XnJLe9ZIbbGUYtzPQJ16u1

bayamasabayamasa

境界区切り文字で分けられた、各パーツにはContent-Dispositionヘッダーフィールドが含まれている必要がある。
ここでの処理タイプは form-dataであり、nameの追加パラメーターを含める必要がある。nameパラメータの値はフォームの元のフィールド名である
field名がuserである場合、以下のようになる

Content-Disposition: form-data; name="user"
bayamasabayamasa

ファイルのコンテンツを表すフォームデータの場合
Content-Disposition ヘッダーフィールドのfilenameパラメータを使用して、ファイルの名前を指定する必要がありますが、これは必須ではありません。

bayamasabayamasa

ユーザーに見える部分については、MIMEヘッダーフィールドはUS-ASCIIに制限されているのでファイル名は%エンコードされる場合がある

bayamasabayamasa

multipart/form-dataメディアタイプはContent-Type, Content-Disposition, Content-Transfer-Encoding以外のMIMEヘッダーフィールドをサポートしていません。
他のヘッダーフィールドは無視する必要があります。

またContent-Transfer-Encodingは廃止されました。
そのため限られた状況以外でこのヘッダーをつかっては行けない

このスクラップは2023/04/09にクローズされました