3

我正在尝试了解如何fetch根据规范使用 whatwg。具体来说,如果我能做到这一点,根据规格。

fetch("https://example.org", {headers:{'Content-Type', 'image/jpeg'}})

这实际上可以通过github 的 fetch polyfill实现,即按照他们的说法,“尽可能接近标准 Fetch 规范”。

当我阅读MDN 文档时,我阅读了这个

headers:您要添加到请求中的任何标头,包含在Headers对象或ByteString.

(编辑:我现在已经编辑了 MDN 页面,所以他们不再直接谈论Headers初始化ByteString。)

这意味着不允许普通对象。

但是,这个文档并不完美,所以我去了规范,它是用他们通常冗长的方式编写的,我发现这个:

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 对象。)

正如 MDN 建议的那样,我也看不到任何关于headers可以直接实例化的信息。ByteString

我也感兴趣的是不同的实现现在实际接受的内容。

4

1 回答 1

3

您可以尝试使用以下代码:

var r = new Request('test.html', {
  headers: {
    'Custom-Header': 'test',
    'Content-Type': 'image/jpeg'
  }
});
for (h of r.headers) alert(JSON.stringify(h));

它适用于 Firefox 和 Chrome。我没有在 Opera 中尝试当前支持 Fetch API 的浏览器

顺便说一句,MDN 不建议从ByteString. 实际上,这ByteString只是String在 JavaScript 中。

于 2016-02-10T07:18:41.887 回答