【问题标题】:What is the '-' in multipart/form-data?多部分/表单数据中的“-”是什么?
【发布时间】:2011-03-31 07:28:13
【问题描述】:

我想问一个关于多部分/表单数据的问题。我找到了多部分帖子的 http 标头和 Content-Type: multipart/form-data;边界=-------边界编号。我想问一下,boundaryNumber和'='之间有多少个'-'?

【问题讨论】:

    标签: multipartform-data


    【解决方案1】:

    没有一个- 是强制性的。你可以有任意数量的。为什么用户代理倾向于添加这么多,对我来说实际上是一个谜。它可能是传统的,因为在过去,当人们仍然定期查看实际的协议流量时,它提供了一些很好的视觉分离。现在是没有意义的。

    但是请注意,当您使用流中的边界时,它必须以两个连字符作为前缀 (--)。这是协议的一部分。当然,大多数用户代理在其边界中使用大量连字符这一事实使得通过示例很难看到这一点。

    此外,last 边界(标记消息的结束)以 为前缀, 以两个连字符 (--) 为后缀。

    总而言之,您可以将边界称为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--
    

    【讨论】:

    • +1 用于区分规范中的两个边界 (--) 与通常添加到边界的多余 (--)...
    • 当你在最后一行--OMGWTFPLZDIEKTHX--之后有内容时会发生什么?
    • 我猜你违反了协议。
    • 它不适用于查看协议流量的人。 Multipart 也用于电子邮件,预 MIME 电子邮件阅读器将向用户显示所有内容,包括多部分边界。在这种情况下,分隔各部分的一长串连字符会使内容更具可读性。
    • “连字符是为了与早期的 RFC 934 消息封装方法大致兼容,并且便于在某些实现中搜索边界。” (source)
    【解决方案2】:

    破折号的数量取决于您想要的数量。如果您愿意,它可以为零 - 只是更多的破折号使边界更加明显。

    边界由一条包含两个破折号的线加上“边界=”之后的所有内容组成。所以如果你的标题写着boundary=ABC,边界看起来像

    --ABC
    

    【讨论】:

      【解决方案3】:

      在您的边界定义中,不需要连字符。当使用该边界分隔两个不同的身体部位时,您必须以两个连字符开头,然后是您之前定义的边界字符串。

      RFC 1341 (MIME) 对此进行了解释,您可以在“多部分”部分(如链接)中找到更多信息。

      【讨论】:

        【解决方案4】:

        这完全是任意的。

        边界点是定义数据的开始和结束。它是什么并不重要,只要它不是内容的一部分。

        【讨论】:

          【解决方案5】:

          Multipart/form-data 媒体类型可供多种应用程序使用,并由多种协议传输,作为用户填写表单的结果返回一组值的一种方式。

          Multipart/form-data 遵循多部分 MIME 数据流的模型。 multipart/form-data body 包含一系列由边界分隔的部分。

          multipart/form-data 响应示例

          有四个重要的领域我们非常重视:

          -&lt;&lt;boundary_value&gt;&gt;

          Content-Disposition: form-data; name="&lt;&lt;field_name&gt;&gt;"

          Content-Type:数据的类型

          &lt;&lt;field_value&gt;&gt;

          “边界”参数是多部分响应中的线索之一:

          与其他多部分类型一样,各部分用 边界分隔符,使用 CRLF 构造,“--”,以及 “边界”参数。边界作为“边界”提供 multipart/form-data 类型的参数。边界分隔符不得出现在任何封装部分内,并且通常需要将 Content-Type 标头中引号中的“边界”参数值 场地。 资源 - https://datatracker.ietf.org/doc/html/rfc7578

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-09-09
            • 1970-01-01
            • 1970-01-01
            • 2018-12-06
            • 2017-10-26
            • 2019-05-17
            • 2020-09-03
            • 1970-01-01
            相关资源
            最近更新 更多