multipart / form-data中的边界是什么?

我想问一个关于的问题multipart/form-data在HTTP标头中,我发现Content-Type: multipart/form-data; boundary=???

???免费的由用户来定义?还是从HTML生成?我可以定义??? = abcdefg吗?

小卤蛋猿阿飞2020/03/23 11:29:55

问题的确切答案是:是的,您可以为boundary参数使用任意值,因为它的长度不超过70个字节,并且仅由7位US-ASCII(可打印)字符组成。

如果使用的是multipart/*内容类型之一,则实际上需要boundaryContent-Type标头中指定参数,否则服务器(对于HTTP请求)将无法解析有效负载。

除非您完全确定在有效载荷数据中仅使用字符集,否则您可能还希望标头中将charset参数设置为UTF-8Content-TypeUS-ASCII

RFC2046的一些相关摘录

  • 4.1.2。字符集参数:

    与某些其他参数值不同,charset参数的值不区分大小写。在没有字符集参数的情况下必须假定的默认字符集是US-ASCII。

  • 5.1。多部分媒体类型

    如内容传输编码字段[RFC 2045]的定义中所述,类型“ multipart”的实体除“ 7bit”,“ 8bit”或“ binary”外不允许编码。在任何情况下,“多部分”边界定界符和标头字段始终表示为7位US-ASCII(尽管标头字段可以按照RFC 2047编码非US-ASCII标头文本),并且正文部分中的数据可以在在每个适当的正文部分的基础上,具有Content-Transfer-Encoding字段。

    多部分实体的“内容类型”字段需要一个参数“边界”。然后将边界定界符行定义为完全由两个连字符(“-”,十进制值45)组成的行,其后是Content-Type标头字段中的边界参数值,可选的线性空白和终止CRLF。

    边界分隔符不得出现在封装的材料中,并且长度不能超过70个字符,并且不计算两个前导连字符。

    最后一个主体部分之后的边界定界线是一个明显的定界符,它指示将不再跟随其他主体部分。这样的定界线与之前的定界线相同,只是在边界参数值之后添加了两个连字符。

这是使用任意边界的示例:

Content-Type: multipart/form-data; charset=utf-8; boundary="another cool boundary"

--another cool boundary
Content-Disposition: form-data; name="foo"

bar
--another cool boundary
Content-Disposition: form-data; name="baz"

quux
--another cool boundary--