可以将get对象作为标头获取吗?

时间:2016-02-09 16:06:48

标签: javascript fetch-api

我正在尝试了解如何根据规范使用whatwg fetch。具体来说,如果我可以这样做,根据规格。

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

这实际上可以使用github's fetch polyfill,也就是说,根据他们的话,"尽可能接近标准的Fetch规范"。

当我阅读MDN documentation时,我读到了这个

  

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都接受了标题对象。)

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

我感兴趣的还有实际现在接受的不同实现。

1 个答案:

答案 0 :(得分:2)

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

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