针对结构化字段发布了新的 RFC:RFC9651。
HTTP 标头在值的复杂程度方面有点免费
被编码,许多标头需要自己的迷你解析器。
不久前,人们开始努力修复此问题,名为“结构化字段”。它们被称为字段而不是“标头”,因为 HTTP 同时具有标头和尾部!
结构化字段可让您对列表、字典、字符串、数字、布尔值和二进制数据等内容进行编码。 2021 年的原始 RFC 非常成功,尽管许多现有标头无法改造为这种格式,但许多新标准正在利用。
一些例子:
// Parsed an ASCII string Header: "foo" // A simple string, called a 'Token' in the spec Header: foo // Parsed as number Header: 5 Header: -10 Header: 5.01415 // Parsed into boolean Header: ?1 Header: ?0 // Binaries are base64 encoded Header: :RE0gbWUgZm9yIGEgZnJlZSBjb29raWU=: // Items can have parameters Header: "Hello world"; a="5" // A simple list Header: 5, "foo", bar, ?1 # Each element can have parameters Header: sometoken; param1; param2=hi, 42 // A list can also contain lists itself. These are called 'inner lists' and // use parenthesis Header: sometoken, (innerlistitem1 innerlistitem2), (anotherlist) // A simple dictionary Header: fn="evert", ln="pot", coffee=?1 // Each item may have parameters too Header: foo=123; q=1, bar=123, q=0.5 // A dictionary value may be an inner list again Header: foo=(1 2 3)
上周发布的新 RFC 添加了 2 个新数据类型:日期和
“显示字符串”,这是适合 HTTP 标头(和预告片)格式的 Unicode 序列化。
// Parsed into a Date object<br> Header: @1686634251 <p>// A Unicode string, called a 'Display String' in the spec. They use<br> // percent encoding, but encode a different set of characters than<br> // URLs.<br> Header %"Frysl%C3%A2n"<br> </p>
如果您在野外遇到这些标头,那么使用标准解析器确实是个好主意。原因之一是使用结构化字段有一个内置的扩展机制。您需要确保当出现新参数时您的应用程序不会突然崩溃。
您可能还想定义和使用您自己的 HTTP 标头。结构化字段格式是一个非常好的“默认选择”,它消除了“我应该如何编码键值对象”或“如何编码 UTF-8 字符串”等决策。
随着每种语言都会出现解析器,您不必担心编写自己的一次性格式。
我是结构化字段 Javascript 库(称为“结构化标头”)的维护者,我还针对这个新的 RFC 更新了该库。我希望我选择了“结构化字段”这个名称,但我在原始标准更改名称之前选择了这个名称。
我刚刚发布了该库的 v2,支持这些新类型,并且还添加了 ES 模块支持。
回复其中一项:
以上是新的结构化字段 RFC 已发布,我的 Javascript 包也是如此的详细内容。更多信息请关注PHP中文网其他相关文章!