【发布时间】:2016-02-10 20:31:23
【问题描述】:
我正在尝试了解如何根据规范使用 whatwg fetch。具体来说,如果我能做到这一点,根据规范。
fetch("https://example.org", {headers:{'Content-Type', 'image/jpeg'}})
github's fetch polyfill 实际上可以做到这一点,也就是说,按照他们的话说,“尽可能接近标准 Fetch 规范”。
当我读到MDN documentation 时,我读到了这个
headers:要添加到请求中的任何标头,包含在Headers对象或ByteString中。
(编辑:我现在已经编辑了 MDN 页面,所以他们不再直接谈论 ByteString 的 Headers 初始化。)
这意味着普通的对象是不允许的。
但是,这个文档并不完美,所以我查看了规范,它们以通常的冗长方式编写,我发现:
https://fetch.spec.whatwg.org/#request-class
请求类
Constructor(RequestInfo input, optional RequestInit init) dictionary RequestInit { ... HeadersInit headers; ... } typedef (Headers or sequence<sequence<ByteString>> or OpenEndedDictionary<ByteString>) HeadersInit;OpenEndedDictionary 是一个未来的 IDL 结构。期待它被使用 像这样:
var meta = { "Content-Type": "text/xml", "Breaking-Bad": "<3" } new Headers(meta)
如果我没看错,这意味着这个对象实际上是可以使用的(OpenEndedDictionary 是......只是一个对象)。我理解正确吗?
(我会补充一点,通过我的实验,Firefox 和 Chrome 都接受 header 对象。)
我也看不到任何关于 headers 可以像 MDN 建议的那样直接从 ByteString 实例化的信息。
我还感兴趣的是不同的实现实际上现在接受什么。
【问题讨论】:
-
-
这里的问题是
OpenEndedDictionary还没有在任何地方定义。 (这就是他们所说的“OpenEndedDictionary<T>是未来的 IDL 构造”的意思。)它在HeadersInit的 typedef 中使用,但规范没有正式说明OpenEndedDictionary是什么或它的行为方式。当作者开始定义它时,该规范给出了一点关于它可能如何工作的说明。因此,尚不清楚特定实现是否可以在这一点上符合规范,因为规范在这一点上明确含糊(并且有一天会变得不那么含糊)。 -
好的,在这种情况下,我在我的问题中添加了一条注释:“我还感兴趣的是不同的实现现在实际接受的内容。”
标签: javascript fetch-api