我正在尝试了解如何根据规范使用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建议的那样。
我感兴趣的还有实际现在接受的不同实现。
答案 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
。