multipart/form-dataを見ていく
MIME type (Multipurpose Internet Mail Extensions) 別名メディアタイプ
文書、ファイル、バイト列の性質や形式を示す標準。RFC6838で定義されている。
単純なMIMEタイプはタイプ
とサブタイプ
で構成されて、間に/
が入ることでMIMEタイプを構成する
タイプ/サブタイプ
タイプには個別型(discrete)とマルチパート型(multipart)の二種類が存在する。
個別型は単一のファイルまたはメディアを表すタイプ。
マルチパート型は複数のコンポーネントによって構成される文書を表すもので、それぞれの部分が固有のMIMEタイプを持つ
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
境界区切り文字で分けられた、各パーツにはContent-Dispositionヘッダーフィールドが含まれている必要がある。
ここでの処理タイプは form-dataであり、name
の追加パラメーターを含める必要がある。nameパラメータの値はフォームの元のフィールド名である
field名がuserである場合、以下のようになる
Content-Disposition: form-data; name="user"
multipart/form-dataメディアタイプはContent-Type, Content-Disposition, Content-Transfer-Encoding以外のMIMEヘッダーフィールドをサポートしていません。
他のヘッダーフィールドは無視する必要があります。
またContent-Transfer-Encodingは廃止されました。
そのため限られた状況以外でこのヘッダーをつかっては行けない
参考