观察、决策、行动三个方框,旁边强调逐段分帧,并在提交前核对输入总量。

multipart 边界把正文切成几段

multipart/form-data 是一种由多个独立 part 组成的 HTTP 表示。一条请求可以同时携带文本字段和二进制文件,但每一段仍要有自己的头部和明确的分隔。客户端选择 boundary 参数,把它写入 Content-Type,再在正文中写出匹配的分隔行。边界只负责分框,不负责判断文件是否安全,也不会替应用决定哪些字段可以提交。 边界负责把各段框起来 每条分隔线以两个连字符和声明的边界值开头,结束分隔线还要再加两个连字符。multipart 的 boundary 参数是必需的,长度一般为一到七十个允许字符,末尾不能有空白;必要时参数要用引号包住。RFC 7578 要求分隔符不能出现在任何封装 part 中。使用较长、不可预测的值可以把偶然撞值的概率降得很低,但随机并不等于数学上绝对不相撞,生成器仍要遵守语法。 第一个分隔符之前是 preamble,结束分隔符之后是 epilogue。MIME 读取器会忽略这两处内容,因此应用不能把尾声误当成另一个表单字段;不过它们仍是 HTTP 请求正文的字节,应计入整条请求的预算。multipart 解析器返回 EOF,不代表 HTTP 正文已经全部消费完,服务器还要决定怎样处理剩余内容。 每个 part 都有自己的头 form-data 的每个 part 都需要带有包含 name 参数的 Content-Disposition。文件通常还带 filename 与 Content-Type,但文件名是外部输入,不能直接拼进本地路径,也不能保留其中的目录组件。相同字段名可能出现多次,而且顺序有意义;把它们压成一个 map 可能悄悄改变用户提交的表单。part 头部也不能替代对文件真实字节、扩展名、大小和格式的验证。 ...

十一月 10, 2027 · 4 分钟 · XB Field Notes