Part
multipart/form-data
由许多块part
组成,每一块之间由boundary
分隔开
每一块都有自己的header
Content-Disposition: form-data; name="user"
//or
Content-Disposition: form-data; name="user"; filenmae="image.png"
每一块都可以有一个可选的Content-Type
字段,默认为text/plain
,如果是文件类型,而且不知道其MIME,那么应该设置为application/octet-stream
Content-Type: image/png
每一块的header和body之间都会有一个空行
每一行的结尾都应该用CRLF
(\r\n
)
Tips
- 前端发来的
filename
不应该信任 name
应该独一无二name
和filename
都需要Percent-Encoding
,应该避免Non-ASCII
boundary
boundary 应该放在Content-Type
中
Content-Type: multipart/form-data; boundary=abcedfghijk
每个part之间的分隔线由--
,boundary
,CRLF
组成,每个part之前都需要放置一个。最后一个分割线需要加上--
后缀。比如
--abced
Content-Disposition: form-data; name="user"
uservalue
--abced
Content-Disposition: form-data; name="file"; filenmae="image.png"
Content-Type: image/png
�PNG
ffffff
--abced--
背景知识
- Percent-Encoding,也叫做URL Encoding。https://en.wikipedia.org/wiki/Percent-encoding