1)这两个的区别是什么?
它们都是 form表单提交时enctype属性的取值 “请求体怎么编码” 的方式(决定浏览器怎么把表单字段打包发给后端,多用于POST请求)。
✅ application/x-www-form-urlencoded(普通表单,默认)
-
特点:把表单字段编码成
key=value&key2=value2这种格式(会做 URL 编码,比如空格变+,特殊字符变%xx) -
适合:纯文本字段(用户名/密码/搜索条件等)
-
请求体示例:
username=tom&password=123
✅ multipart/form-data(带文件/二进制)
-
特点:把每个字段拆成“多个部分”(part),每一段都有自己的头信息;文件会以二进制形式放在某个 part 里
-
适合:上传文件(也可以同时带普通字段)
-
请求体特点:会有 boundary 分隔符(你在浏览器里看会很长)
简单记:
urlencoded = “一行 key=value&...”
multipart = “分块 + boundary,能装文件”
2)是不是只有 HTML 的 POST 才会有 enctype 这两个选项?
enctype 是 <form> 的属性,它用来指定 表单提交时的编码方式,只对“会发请求体”的提交方式有意义。
-
<form method="post">:✅enctype才真正起作用(因为 POST 会把数据放 body 里) -
<form method="get">:❌ 基本没意义(GET 会把字段拼到 URL 的 query 上,不用 body 编码)
所以你的感觉是对的:在 HTML 原生 form 里,enctype 基本就是给 POST 用的(尤其是上传文件时必须用)。
另外还有一个常见值:
-
text/plain(很少用)
3)HTML 表单默认用哪个?
如果你不写 enctype:
<form method="post" action="/login">
默认就是:
-
application/x-www-form-urlencoded
如果要上传文件,必须写:
<form method="post" action="/upload" enctype="multipart/form-data">
4)后端接收时有什么差别?(Spring)
-
urlencoded:
@RequestParam/ DTO(@ModelAttribute) 很顺 -
multipart:文件用
MultipartFile接
@PostMapping("/upload")
public String upload(@RequestParam("file") MultipartFile file,
@RequestParam("desc") String desc) { ... }
2万+

被折叠的 条评论
为什么被折叠?



