おわりに
バイナリデータ転送がある場合は、multipart / form-dataを使用します。それ以外の場合は、x-www-form-urlencodedを使用します。
違い
x-www-form-urlencodedとmultipart / form-dataは、POSTリクエストをサーバーに送信するときのHTTPプロトコルの2つのエンコーディングスキームであり、フォームフォームのenctype属性に対応しています。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<form action="/" method="POST" enctype="application/x-www-form-urlencoded">
姓名: <input type="text" name="name"><br>
年龄: <input type="text" name="age">
<input type="submit" value="提交">
</form>
</body>
</html>
x-www-form-urlencoded
デフォルトでは、このエンコードでは、データは名前と値のデータのペアを介して転送されます。
POST / HTTP/1.1
Host: localhost:8080
Content-Length: 233
name=june&age=12
エンコーディングにUnicode文字が含まれている場合は、送信前に変換する必要があります。次に例を示します。
name=%E6%B5%8B%E8%AF%95&age=12
%で始まり、その後にバイトを表す2つの16進数が続きます。UTF-8エンコードを使用して、文字をバイトシーケンスに変換します。
multipart / form-data
ファイルをアップロードする必要がある場合は、このエンコードを使用します。データは指定された区切り文字で区切られ、データをトランスコードする必要はありません。
POST / HTTP/1.1
Host: localhost:8080
Content-Length: 233
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryfPIuyKYREDzq8zXG
------WebKitFormBoundaryfPIuyKYREDzq8zXG
Content-Disposition: form-data; name="name"
张三
------WebKitFormBoundaryfPIuyKYREDzq8zXG
Content-Disposition: form-data; name="age"
12
------WebKitFormBoundaryfPIuyKYREDzq8zXG--
これでRESTfulスタイルのインターフェースが人気になり、リクエストの本文ではデータ形式としてjsonが使用され、対応するContent-Typeはapplication / jsonになります