Content-Typeのmultipart/form-data; boundaryとは何か

HTTP
HTTP
この記事は約3分で読めます。

Content-Typeとは

  • HTTPリクエストのPOSTなどで、クライアントがサーバーに送ったデータの種類を伝えるために使われる
  • リクエストヘッダーに含まれる
  • どのような種類のデータを送信しているか、MIME Type(text/htmlなど)の形式で示す

MIME Typeとは

  • タイプ/サブタイプ;引数=値
  • 引数はオプションであり、追加の詳細情報
  • タイプ
    • 個別型
      • 単一のファイルなど
    • マルチパート型
      • 複数のコンポーネント
      • 一度のトランザクションで一緒に送信される複数のファイルをまとめることができる
  • MIME Typeの 1 つが、multipart/form-data

multipart/form-data; boundaryとは

  • マルチパート型
  • 複数の種類(バイナリ・テキスト)を 1 度のHTTP通信で扱える
  • ファイルのアップロードやHTMLフォームの内容をブラウザからサーバに送信する際に利用
  • 複数のパートに分かれ、個別のパートが判別できるようにboundaryがある
  • 各パートに含まれると想定されているもの
    • 値が form-data である Content-Dispositionヘッダー
    • 対応するコントロールのコントロール名
  • 複数のパートは、データと共にペイロードに含まれる
    • 以下はペイロードの例
Content-Type: multipart/form-data; boundary=aBoundaryString
(マルチパート文書全体に関連付けられる、他のヘッダー)

--aBoundaryString
Content-Disposition: form-data; name="myFile"; filename="img.jpg"
Content-Type: image/jpeg

(データ)
--aBoundaryString
Content-Disposition: form-data; name="myField"

(データ)
--aBoundaryString
(サブパート)
--aBoundaryString--
  • boundaryは、境界を示す
  • マルチパートの本文では、boundaryディレクティブが必要
  • なぜなら、複数のデータが含まれるため、どのデータか判別するために区切る必要があるから
  • multipart/form-data; boundary=xxx
    • boundaryは引数
    • 追加の詳細情報を提供可能
    • boundaryはデータを1つずつ区別するために用いられる

参考

【HTTP】multipart/form-data の boundary って何ぞや? - Qiita
API の公式ドキュメントには Sample Request がありますよね。 よく使っている LINEWORKS API でも Sample Request を用意してくれているのですが、記述形式が HTTP Request なの...
Content-Type - HTTP | MDN
Content-Type 表現ヘッダーは、リソースのメディア種別を示すために使用します。
[フロントエンド] multipart/form-dataを理解してみよう - YoheiM .NET
ファイルアップロードを実装する時はいつも苦戦するのですが、multipart/form-dataというデータ形式を理解できたらすんなりと実装できるようになりました。今日は、ファイルアップロードでは必須とも言えるmultipart/form-dataについて、ブログにまとめました。
MIME タイプ (IANA メディアタイプ) - HTTP | MDN
メディアタイプ (別名 Multipurpose Internet Mail Extensions または MIME タイプ) は、文書、ファイル、またはバイト列の性質や形式を示します。 MIME タイプは IETF の RFC 6838 で定義され、標準化されています。
Forms in HTML documents
タイトルとURLをコピーしました