What does enctype='multipart/form-data'
mean in an HTML form and when should we use it?
Html – What does enctype=’multipart/form-data’ mean
htmlhttp-headersmultipartform-data
Related Topic
- HTML 5: Is it
,
, or - Html – How to create an HTML button that acts like a link
- 403 Forbidden vs 401 Unauthorized HTTP responses
- Application/x-www-form-urlencoded or multipart/form-data
- Json – How to POST JSON data with cURL
- Html – Why does HTML think “chucknorris” is a color
- Javascript – Is it possible to apply CSS to half of a character
Best Answer
When you make a POST request, you have to encode the data that forms the body of the request in some way.
HTML forms provide three methods of encoding.
application/x-www-form-urlencoded
(the default)multipart/form-data
text/plain
Work was being done on adding
application/json
, but that has been abandoned.(Other encodings are possible with HTTP requests generated using other means than an HTML form submission. JSON is a common format for use with web services and some still use SOAP.)
The specifics of the formats don't matter to most developers. The important points are:
text/plain
.When you are writing client-side code:
multipart/form-data
when your form includes any<input type="file">
elementsmultipart/form-data
orapplication/x-www-form-urlencoded
butapplication/x-www-form-urlencoded
will be more efficientWhen you are writing server-side code:
Most (such as Perl's
CGI->param
or the one exposed by PHP's$_POST
superglobal) will take care of the differences for you. Don't bother trying to parse the raw input received by the server.Sometimes you will find a library that can't handle both formats. Node.js's most popular library for handling form data is body-parser which cannot handle multipart requests (but has documentation that recommends some alternatives which can).
If you are writing (or debugging) a library for parsing or generating the raw data, then you need to start worrying about the format. You might also want to know about it for interest's sake.
application/x-www-form-urlencoded
is more or less the same as a query string on the end of the URL.multipart/form-data
is significantly more complicated but it allows entire files to be included in the data. An example of the result can be found in the HTML 4 specification.text/plain
is introduced by HTML 5 and is useful only for debugging — from the spec: They are not reliably interpretable by computer — and I'd argue that the others combined with tools (like the Network Panel in the developer tools of most browsers) are better for that).