enctype quyết định cách browser đóng gói dữ liệu form khi method="post".
html
<!-- mặc định: key=value&key=value, đã URL-encode -->
<form method="post">
<!-- bắt buộc khi có input type=file -->
<form method="post" enctype="multipart/form-data">
<input type="file" name="avatar">
</form>
<!-- không encode; chỉ dùng để xem cho dễ khi debug -->
<form method="post" enctype="text/plain">| Giá trị | Khi nào dùng | Dạng body |
|---|---|---|
application/x-www-form-urlencoded | mặc định, dữ liệu chữ | name=Dinh&age=30 |
multipart/form-data | có file | chia phần theo boundary |
text/plain | debug | thô, không encode |
Lưu ý: quên enctype="multipart/form-data" khi upload — browser vẫn gửi form, nhưng chỉ gửi tên file dạng chuỗi, không có nội dung. Server nhận được avatar="anh.png" và không hiểu vì sao file rỗng.
Ghi chú: gửi bằng fetch với FormData thì không được tự đặt Content-Type — browser cần tự sinh boundary.