fetch 可以得到 object as headers 吗?

Can fetch get object as headers?

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

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

这个用github's fetch polyfill其实是可以的,也就是按照他们的话说,"as closely as possible to the standard Fetch specification".

当我阅读MDN documentation时,我阅读了这篇

headers: Any headers you want to add to your request, contained within a Headers object or ByteString.

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

也就是说普通的object是不允许的

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

https://fetch.spec.whatwg.org/#request-class

Request class

Constructor(RequestInfo input, optional RequestInit init)

dictionary RequestInit {
...
  HeadersInit headers;
...
}

typedef (Headers or sequence<sequence<ByteString>> or OpenEndedDictionary<ByteString>) HeadersInit;

OpenEndedDictionary is a future IDL construct. Expect it to be used as such:

var meta = { "Content-Type": "text/xml", "Breaking-Bad": "<3" }
new Headers(meta)

如果我没看错,这意味着 object 实际上可以使用(而 OpenEndedDictionary 是……只是一个 object)。我理解正确吗?

(我要补充一点,根据我的实验,Firefox 和 Chrome 都接受 header object。)

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

我也感兴趣的是不同的实现实际上现在接受什么。

您可以尝试使用此代码:

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。我没有在 the browsers currently supporting Fetch API.

的 Opera 中尝试

顺便说一下,MDN 不建议从 ByteString 实例化。实际上,它是说 JavaScript.

中的 ByteString is just String