3

fetch仕様に従ってwhatwgの使用方法を理解しようとしています。具体的には、仕様上、これができれば。

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

これは、実際にはgithub の fetch polyfillで可能です。つまり、彼らの言葉によれば、「標準の Fetch 仕様にできるだけ近い」ということです。

MDNのドキュメントを読むとき、私はこれを読みました

headersHeaders:オブジェクトまたはに含まれる、リクエストに追加する任意のヘッダー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 の両方がヘッダー オブジェクトを受け入れることを付け加えておきます。)

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 で動作します。現在 Fetch API をサポートしているブラウザである Opera では試していません。

ところで、MDN は からインスタンス化することを提案していませんByteString。実際、それはJavaScriptByteStringだけだと言っています。String

于 2016-02-10T07:18:41.887 に答える