如何解释缺少 CRLF 的多部分?

How to interpret multipart that’s missing a CRLF?

这是一个 RFC 2046 使用“边界”作为边界的多部分八位字节流。

--boundary
Content-Type: text/plain; charset="US-ASCII"

abc

--boundary

a
--boundary


--boundary

--boundary
--boundary--

第 1 部分 abc\r\n 带有尾随 CRLF 和一个 header 描述其 content-type。

第 2 部分是 a,没有 header,也没有尾随换行符。

第 3 部分为空。

第 4 部分是什么?有第 5 部分吗?

尽管我无法提供明确的答案,但这是我基于 RFC 的推理:

根据 RFC 2046 中的 BNF,示例的最后部分(即 OP 的“第 4 部分”和“第 5 部分”)可以概括为

delimiter CRLF delimiter close-delimiter

其中 delimiter := CRLF dash-boundary。 多部分 body 的 BNF 定义为

multipart-body := [preamble CRLF]
                  dash-boundary transport-padding CRLF
                  body-part *encapsulation
                  close-delimiter transport-padding
                  [CRLF epilogue]

哪里

encapsulation := delimiter transport-padding
                 CRLF body-part

尽管 RFC 2046 包含两个明显不同的 body-part 规则,即。 here and here, it seems body-part may be empty (also see MIME-part-headers in RFC 2045 and message in RFC 822)。另外,transport-padding应该是空的。

假设是这种情况,那么带有空 body-partencapsulation 将是 delimiter CRLF.

我想这会使“第 4 部分”正式成为空白。

至于“第 5 部分”,根据上述内容,我希望流在 encapsulation close-delimiter 结束,所以那将是 delimiter CRLF close-delimiter

但是,流(“第 5 部分”)以 delimiter close-delimiter 结尾,没有 CRLF(我假设这是问题标题中的“缺少 CRLF”)。

这是否意味着流完全无效(或 non-compliant)?