我被 RFC 7578 和它所指的 RFC 中看似隐式允许的空格所困扰,虽然似乎在允许这样的空格时,应该明确说明。由于同样的空白故事,我也对我认为的模棱两可感到困难。
RFC 7578 at 4.2关于“Content-Disposition”,给出了这个例子:
Content-Disposition: form-data; name="user"
它这样做是指 RFC 2183。这个RFC 2183 at 2给出了没有明确提及空白的 BNF 规则(WSP 和 LWS 都没有),虽然上面 RFC 7578 的示例很明显使用了空白,而规则没有提到这一点:
disposition := "Content-Disposition" ":"
disposition-type
*(";" disposition-parm)
RFC 2183 指的是 RFC 822,现在是 RFC 2822。这个RFC 2822 在 3.2.4和3.2.5中明确提到了原子(或点原子)和引用字符串周围的 CFWS。在其他地方,它说基于此 RFC 的语法依赖于它定义的标记化。
因此,“form-data”和“name”可能是 RFC 2822 之后的原子,这可以解释为什么在示例中两者之前都可以出现空格(“;”将是一个特殊字符,因此是一个标记)。但是RFC 2822 所指的 3.1 的 RFC 2234说:
任何希望在分隔符或字符串段周围允许线性空白的语法都必须明确指定它。[…]
然后,仍然与上面的示例大致相同,如果它是由原子组成的,那么“name”“=”是模棱两可的,因为“name=”同样是一个原子,并且没有规则说明“”之间是否允许有空格名称”和“=”,这正是让我感到模棱两可的原因。
这只是一个例子,我只是觉得在这些标准的其他地方也不清楚。
是否可以将其理解为:它由原子(和带引号的字符串)组成,并且在原子(和带引号的字符串)周围允许有空格,尽管某些 RFC 没有明确说明它们中的空格或原子的任何内容规则,而他们应该?
更新
顺便说一句,这些 RFC 似乎根本不是指原子/点原子,而是指一种由除tspecials之外的任何可打印字符组成的令牌,在多个地方定义相同,一组字符看起来很像来自RFC 822,虽然不同。此令牌定义与 RFC 822/2822 中的不同。尽管引用了 RFC 822,但这些 RFC 似乎重新定义了自己的符号。空白仍然不清楚。