我想问一个关于多部分/表单数据的问题。我找到了多部分帖子的 http 标头和 Content-Type: multipart/form-data; 边界=-------边界编号。我想问,boundaryNumber和'='之间有多少个'-'?
5 回答
没有一个-
是强制性的。你可以有任意数量的。为什么用户代理倾向于添加这么多,对我来说实际上是一个谜。它可能是传统的,因为在过去,当人们仍然定期查看实际的协议流量时,它提供了一些很好的视觉分离。如今,它毫无意义。
但是请注意,当您在流中使用边界时,必须以两个连字符 ( --
) 作为前缀。这是协议的一部分。当然,大多数用户代理在其边界中使用大量连字符这一事实使得通过示例很难看出这一点。
此外,最后一个边界(标记消息的结尾)以两个连字符 ( ) 为前缀和--
后缀。
因此,总而言之,您可以调用您的边界OMGWTFPLZDIEKTHX
,然后您的流量可能如下所示:
Content-Type: multipart/form-data; boundary=OMGWTFPLZDIEKTHX
--OMGWTFPLZDIEKTHX
Content-Type: text/plain
First part (plain text).
--OMGWTFPLZDIEKTHX
Content-Type: text/html
<html>Second part (HTML).</html>
--OMGWTFPLZDIEKTHX--
破折号的数量取决于您想要的数量。如果您愿意,它可以为零——只是更多的破折号使边界更加明显。
边界由一条包含两个破折号的线加上“边界=”之后的所有内容组成。所以如果你的标题说boundary=ABC
,边界看起来像
--ABC
在您的边界定义中,不需要连字符。当使用该边界来分隔两个不同的身体部位时,您必须以两个连字符开头,然后是您之前定义的边界字符串。
这在RFC 1341 (MIME)中有解释,您可以在 Multipart 部分(如链接)中找到更多信息。
这是完全任意的。
边界点是定义数据的开始和结束。它是什么并不重要,只要它不是内容的一部分。
Multipart/form-data 媒体类型可以被多种应用程序使用,并通过多种协议传输,作为用户填写表单的结果返回一组值的方式。
Multipart/form-data 遵循多部分 MIME 数据流的模型。多部分/表单数据主体包含由边界分隔的一系列部分。
有四个重要的领域是我们很重要的回应:
-<<boundary_value>>
Content-Disposition: form-data; name="<<field_name>>"
Content-Type:数据的类型
<<field_value>>
“边界”参数是多部分响应中的线索之一:
与其他多部分类型一样,部分由边界分隔符分隔,使用 CRLF、“--”和“边界”参数的值构造。边界作为“边界”参数提供给 multipart/form-data 类型。边界分隔符不得出现在任何封装部分内,并且通常需要在 Content-Type 头字段中将“边界”参数值括在引号中。资源 - https://datatracker.ietf.org/doc/html/rfc7578