Fetch
fetch() は Window インターフェイスのメソッドで、ネットワークからリソースを取得するプロセスを開始し、レスポンスが利用できるようになったら履行されるプロミスを返します。
このプロミスは、そのリクエストに対するレスポンスを表す Response で解決します。
fetch() のプロミスは、ネットワークエラーが発生した場合(普通は権限の問題があったときなど)のみ拒否されます。 fetch() のプロミスは、サーバーがエラーを示す HTTP ステータスコード(404、504 など)を返しても拒否されません。 代わりに、 then() ハンドラーで Response.ok や Response.status プロパティをチェックする必要があります。
fetch() メソッドは取得するリソースのディレクティブではなく、コンテンツセキュリティポリシーの connect-src ディレクティブによって制御されます。
対応ブラウザ
| 機能 | デスクトップ | モバイル | ||||
|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Safari | Chrome Android | Safari iOS | |
| 42 | 14 | 39 | 10.1 | 42 | 10.3 | |
authorization_removed_cross_origin クロスオリジンリダイレクトから`Authorization`ヘッダーが削除されました | | | 111 | 16.1 | | 16.1 |
blob_data_support blob: および data: のサポート | 48 | 79 | 39 | 10.1 | 48 | 10.3 |
init_keepalive_parameter `init.keepalive` パラメータ | 66 | 15 | 133 | 13 | 66 | 13 |
init_referrerPolicy_parameter `init.referrerPolicy` パラメータ | 52 | 79 | 52 | 11.1 | 52 | |
| Headers はフェッチ API のインターフェイスで、 HTTP リクエスト/レスポンスヘッダー上のさまざまなアクションを実行します。アクションとしては、リクエストヘッダーのリストに対するヘッダーの取得、設定、追加、削除などがあります。 | 42 | 14 | 39 | 10.1 | 42 | 10.3 |
@@iterator [シンボル.イテレータ] | 42 | 16 | 44 | 10.1 | 42 | 10.3 |
| append() は Headers インターフェイスのメソッドで、 Headers オブジェクト内の既存のヘッダーに新しい値を追加します。または、既存のヘッダーがない場合には、ヘッダーを追加します。 | 42 | 14 | 39 | 10.1 | 42 | 10.3 |
| delete() は Headers インターフェイスのメソッドで、現在の Headers オブジェクトからヘッダーを削除します。 | 42 | 14 | 39 | 10.1 | 42 | 10.3 |
| Headers.entries() メソッドは、このオブジェクトに含まれるすべてのキーと値のペアを走査するIteration_protocolsを返します。それぞれのペアのキーと値は両方とも String オブジェクトです。 | 42 | 16 | 44 | 10.1 | 42 | 10.3 |
| Headers.forEach() メソッドは、 Headers オブジェクト内のキー/値の組にそれぞれ一度ずつ、コールバック関数を実行します。 | 42 | 14 | 47 | 10.1 | 42 | 10.3 |
| get() は Headers インターフェイスのメソッドで、指定された名前の Headers オブジェクト内のヘッダーのすべての値のバイト文字列を返します。要求されたヘッダーが Headers オブジェクトに存在しない場合、null を返します。 | 42 | 14 | 39 | 10.1 | 42 | 10.3 |
| getSetCookie() は Headers インターフェイスのメソッドで、レスポンスに関連付けられたすべての Set-Cookie ヘッダーの値の入った配列を返します。これによって Headers オブジェクトは複数の Set-Cookie ヘッダーを扱えるようになります。 | 113 | 113 | 112 | 17 | 113 | 17 |
| has() は Headers インターフェイスのメソッドで、 Headers オブジェクトに指定された特定のヘッダーがあるかどうかを示す論理値を返します。 | 42 | 14 | 39 | 10.1 | 42 | 10.3 |
| Headers() コンストラクターは、新しい Headers オブジェクトを生成します。 | 42 | 14 | 39 | 10.1 | 42 | 10.3 |
iterate_combined_duplicates 反復処理により、重複するヘッダー名が結合されます | 57 | 16 | 57 | 10.1 | 57 | 10.3 |
iterate_lexicographically 反復処理は辞書順に並べ替えられます | 57 | 18 | 57 | 10.1 | 57 | 10.3 |
| Headers.keys() メソッドは、このオブジェクトに含まれるすべてのキーを読み取ることができるIteration_protocolsオブジェクトを返します。キーは文字列です。です。 | 42 | 16 | 44 | 10.1 | 42 | 10.3 |
| set() は Headers インターフェイスのメソッドで、 Headers オブジェクトの中にある既存のヘッダーに新しい値を設定するか、ヘッダーがまだ存在しない場合には追加するかします。 | 42 | 14 | 39 | 10.1 | 42 | 10.3 |
| Headers.values() メソッドは、このオブジェクトに含まれるすべての値を読み取ることができるIteration_protocolsを返します。値は文字列です。 | 42 | 16 | 44 | 10.1 | 42 | 10.3 |
| Request はフェッチ API のインターフェイスで、リソースのリクエストを表します。 | 42 | 14 | 39 | 10.1 | 42 | 10.3 |
| arrayBuffer() は Request インターフェイスのメソッドで、リクエスト本体を読み込み、それを ArrayBuffer で解決するプロミスとして返します。 | 42 | 14 | 39 | 10.1 | 42 | 10.3 |
| blob() は Request インターフェイスのメソッドで、リクエスト本体を読み込み、それを Blob で解決するプロミスとして返します。 | 42 | 14 | 39 | 10.1 | 42 | 10.3 |
| bodyUsed は Request インターフェイスの読み取り専用プロパティで、リクエスト本体がまだ読み込まれていないかどうかを示す論理値です。 | 42 | 14 | 39 | 10.1 | 42 | 10.3 |
| bytes() は Request インターフェイスのメソッドで、リクエスト本体を読み込み、Uint8Array で解決するプロミスとしてそれを返します。 | 132 | 132 | 128 | 18 | 132 | 18 |
| cache は Request インターフェイスの読み取り専用プロパティで、リクエストのキャッシュモードを保持します。リクエストがブラウザーの HTTP キャッシュ とどのように作用するかを制御します。 | 64 | 14 | 48 | 10.1 | 64 | 10.3 |
cache (only-if-cached) | 64 | 79 | 50 | 10.1 | 64 | 10.3 |
| clone() は Request インターフェイスのメソッドで、現在の Request オブジェクトのコピーを生成します。 | 40 | 14 | 39 | 10.1 | 40 | 10.3 |
| credentials は Request インターフェイスの読み取り専用プロパティで、credentials オプションで指定された Request.Request() コンストラクターの値を反映します。このプロパティは、ブラウザーがリクエストに資格情報を送信するかどうか、また、Set-Cookie レスポンスヘッダーが尊重されるかどうかを決定します。 | 40 | 14 | 39 | 10.1 | 40 | 10.3 |
credentials (default same-origin) デフォルト値 `same-origin` | 72 | 18 | 61 | 12.1 | 72 | 12.2 |
| destination は Request インターフェイスの読み取り専用プロパティで、リクエストされたコンテンツの種類を記述した文字列を返します。 | 65 | 14 | 61 | 10.1 | 65 | 10.3 |
duplex 実験的 duplex は Request インターフェイスの読み取り専用のプロパティで、全二重モードを返します。このモードは、ブラウザーがレスポンスを処理する前にリクエスト全体を送信する必要があるかどうかを決定します。 | 131 | 131 | | | | |
| headers は Request インターフェイスの読み取り専用プロパティで、リクエストに関連する Headers オブジェクトを保持します。 | 40 | 14 | 39 | 10.1 | 40 | 10.3 |
| integrity は Request インターフェイスの読み取り専用プロパティで、このリクエストのサブリソース完全性の値を保持します。 | 46 | 14 | 51 | 10.1 | 46 | 10.3 |
| isHistoryNavigation は Request インターフェイスの。読み取り専用プロパティで、このリクエストが履歴ナビゲーションであるかどうかを示す論理値です。 | 69 | 79 | | | 69 | |
| json() は Request インターフェイスのメソッドで、 このメソッドはリクエスト本体を読み込み、本文を解釈した結果を JSON として解決したプロミスとして返します。 | 42 | 14 | 39 | 10.1 | 42 | 10.3 |
| keepalive は Request インターフェイスの読み取り専用プロパティで、リクエストの keepalive 設定(true または false)が含まれており、これは、リクエストが完全に完了する前にそのリクエストを開始したページが読み込まれなくなった場合に、関連するリクエストをブラウザーが維持するかどうかを示します。 | 66 | 15 | 133 | 13 | 66 | 13 |
| method は Request インターフェイスの読み取り専用プロパティで、このリクエストのメソッド(GET、POST など)を保持します。 | 40 | 14 | 39 | 10.1 | 40 | 10.3 |
| mode は Request インターフェイスの読み取り専用プロパティで、リクエストのモード(cors、no-cors、same-origin、navigate など)を保持します。これは、オリジン間リクエストに対して有効なレスポンスができるか、またレスポンスのプロパティが読み取り可能かどうかを判定するために使用されます。 | 40 | 14 | 39 | 10.1 | 40 | 10.3 |
mode (navigate mode) `navigate` モード | 49 | ≤18 | 46 | 10.1 | 49 | 10.3 |
| redirect は Request インターフェイスの読み取り専用プロパティで、リダイレクトを処理する方法のモードを保持します。 | 46 | 14 | 43 | 10.1 | 46 | 10.3 |
| referrer は Request インターフェイスの読み取り専用プロパティで、ユーザーエージェントによってリクエストのリファラーが設定されます(client や no-referrer、URL、など)。 | 40 | 14 | 39 | 10.1 | 40 | 10.3 |
| referrerPolicy は Request インターフェイスの読み取り専用プロパティで、Referer ヘッダーで送信されるどのリファラー情報がリクエストに記載されるべきかを管理する、リファラーポリシーを返します。 | 52 | 14 | 47 | 10.1 | 52 | 10.3 |
| Request() コンストラクターは、新しい Request オブジェクトを生成します。 | 40 | 14 | 39 | 10.1 | 40 | 10.3 |
Request (cross origin stripped) 既存の `Request` オブジェクトからコンストラクタが作成された場合、クロスオリジンの `referrer` は削除され、`navigate` モードは `same-origin` に変換されます。 | 69 | 15 | 54 | 10.1 | 69 | 10.3 |
Request (init keepalive parameter) `init.keepalive` パラメータ | 66 | 15 | 133 | 13 | 66 | 13 |
Request (init referrer parameter) `init.referrer` パラメータ | 47 | 15 | 47 | 10.1 | 47 | 10.3 |
Request (request body readablestream) 実験的 リクエスト本文に `ReadableStream` を送信する | 105 | 105 | | | 105 | |
Request (response body readablestream) `ReadableStream`をレスポンス本文として読み込む | 43 | 79 | 65 | | 43 | 10.3 |
| text() は Request インターフェイスのメソッドで、リクエスト本体を読み込み、文字列で解決されるプロミスとして返します。 レスポンスは常に UTF-8 を使用してデコードされます。 | 42 | 14 | 39 | 10.1 | 42 | 10.3 |
| url は Request インターフェイスの読み取り専用プロパティで、リクエストの URL を保持します。 | 40 | 14 | 39 | 10.1 | 40 | 10.3 |
| Response はフェッチ API のインターフェイスで、リクエストのレスポンスを表します。 | 42 | 14 | 39 | 10.1 | 42 | 10.3 |
| arrayBuffer() は Response インターフェイスのメソッドで、Response を取り、終わりまで読み取ります。ArrayBuffer で解決されるプロミスを返します。 | 42 | 14 | 39 | 10.1 | 42 | 10.3 |
| blob() は Response インターフェイスのメソッドで、 Response ストリームを取得して完全に読み込みます。 Blob で解決するプロミスを返します。 | 42 | 14 | 39 | 10.1 | 42 | 10.3 |
| body は Response インターフェイスの読み取り専用プロパティで、本体コンテンツの ReadableStream です。 | 43 | 14 | 65 | 10.1 | 43 | 10.3 |
body (readable byte stream) `body` は読み取り可能なバイトストリームです | 116 | 116 | 102 | 26.4 | 116 | 26.4 |
| bodyUsed は Response インターフェイスの読み取り専用プロパティで、本体が読み取り済みであるかどうかを示す論理値です。 | 42 | 14 | 39 | 10.1 | 42 | 10.3 |
| bytes() は Response インターフェイスのメソッドで、Response を取り、終わりまで読み取ります。 Uint8Array で解決されるプロミスを返します。 | 132 | 132 | 128 | 18 | 132 | 18 |
| clone() は Response インターフェイスのメソッドで、レスポンスオブジェクトの複製を作成します。この複製はあらゆる面で同一ですが、異なる変数に格納されます。 | 40 | 14 | 39 | 10.1 | 40 | 10.3 |
| error() は Response インターフェイスのメソッドで、ネットワークエラーに関連付けられた新しい Response オブジェクトを返します。 | 43 | 16 | 39 | 10.1 | 43 | 10.3 |
| headers は Response インターフェイスの読み取り専用プロパティで、このレスポンスに関連付けられた Headers オブジェクトが含まれています。 | 40 | 14 | 39 | 10.1 | 40 | 10.3 |
| json() は Response インターフェイスのメソッドで、 Response のストリームを取得して完全に読み取ります。本体のテキストを JSON として解釈した結果で解決するプロミスを返します。 | 42 | 14 | 39 | 10.1 | 42 | 10.3 |
| json() は Response インターフェイスの静的メソッドで、指定された JSON データを本体とし、Content-Type ヘッダーを application/json に設定したレスポンスを返します。 レスポンスステータス、ステータスメッセージ、追加のヘッダーも設定することができます。 | 105 | 105 | 115 | 17 | 105 | 17 |
| ok は Response インターフェイスの読み取り専用プロパティで、このレスポンスが(ステータスが 200-299 で)成功したかどうかを表す論理値です。 | 42 | 14 | 39 | 10.1 | 42 | 10.3 |
| redirect() は Response インターフェイスのメソッドで、指定された URL へのリダイレクトをもたらす Response を返します。 | 44 | 16 | 39 | 10.1 | 44 | 10.3 |
| redirected は Response インターフェイスの読み取り専用プロパティで、このレスポンスがリダイレクトされたリクエストの結果であるかどうかを示します。 | 57 | 16 | 49 | 10.1 | 57 | 10.3 |
| Response() コンストラクターは、新しい Response オブジェクトを生成します。 | 40 | 14 | 39 | 10.1 | 40 | 10.3 |
Response (accept readablestream) body パラメータは ReadableByteStream を受け付けます | 52 | 79 | 39 | 10.1 | 52 | 10.3 |
Response (body parameter optional) `body` パラメータは省略可能です | 40 | 79 | 59 | 10.1 | 40 | 10.3 |
| status は Response インターフェイスの読み取り専用プロパティで、このレスポンスの HTTP ステータスコードを保持します。 | 40 | 14 | 39 | 10.1 | 40 | 10.3 |
| statusText は Response インターフェイスの読み取り専用プロパティで、 Response.status にある HTTP ステータスコードに対応するステータスメッセージを保持します。 | 40 | 14 | 39 | 10.1 | 40 | 10.3 |
| text() は Response インターフェイスのメソッドで、 Response ストリームを取得して完全に読み込みます。文字列で解決するプロミスを返します。 レスポンスは常に UTF-8 としてデコードされます。 | 42 | 14 | 39 | 10.1 | 42 | 10.3 |
| type は Response インターフェイスの読み取り専用プロパティで、このレスポンスの種類を保持します。 以下のうちの何れかになります。 | 40 | 14 | 39 | 10.1 | 40 | 10.3 |
| url は Response インターフェイスの読み取り専用プロパティで、このレスポンスの URL を保持します。 url プロパティの値は、あらゆるリダイレクトの後に得られる最終的な URL になります。 | 40 | 14 | 39 | 10.1 | 40 | 10.3 |
- バージョン57以前では、`get()`は指定されたヘッダーの最初の値のみを返します。
- バージョン52以前では、`get()`は指定されたヘッダーの最初の値のみを返します。
- バージョン57以前では、`get()`は指定されたヘッダーの最初の値のみを返します。
- このブラウザでは部分的にしか実装されていません
- このバージョンで機能が削除されました (42)
- サービスワーカーでのみ利用可能です。
- このブラウザでは部分的にしか実装されていません
- このバージョンで機能が削除されました (42)
- サービスワーカーでのみ利用可能です。
- Chrome 47 以降、`init` 引数のプロパティのデフォルト値が変更されました。 `mode` のデフォルト値は `same-origin` になりました(以前は `no-cors` でした)。`credentials` のデフォルト値は `include` になりました(以前は `same-origin` でした)。`redirect` のデフォルト値は `follow` になりました(以前は `manual` でした)。
- Chrome Android 47 以降、`init` 引数のプロパティのデフォルト値が変更されました。 `mode` のデフォルト値は `same-origin` になりました(以前は `no-cors` でした)。`credentials` のデフォルト値は `include` になりました(以前は `same-origin` でした)。`redirect` のデフォルト値は `follow` になりました(以前は `manual` でした)。
- Chrome 59でFragmentのサポートが追加されました。
- Chrome Android 59でフラグメントのサポートが追加されました。
- このブラウザでは部分的にしか実装されていません
- このバージョンで機能が削除されました (42)
- サービスワーカーでのみ利用可能です。
- このブラウザでは部分的にしか実装されていません
- このバージョンで機能が削除されました (42)
- サービスワーカーでのみ利用可能です。
基本構文
const myImage = document.querySelector("img");
const myRequest = new Request("flowers.jpg");
window
.fetch(myRequest)
.then((response) => {
if (!response.ok) {
throw new Error(`HTTP error! Status: ${response.status}`);
}
return response.blob();
})
.then((response) => {
myImage.src = URL.createObjectURL(response);
}); 実務での使いどころ
-
Fetch の活用
fetch() は Window インターフェイスのメソッドで、ネットワークからリソースを取得するプロセスを開始し、レスポンスが利用できるようになったら履行されるプロミスを返します。
注意点
- 古いブラウザでは対応していない場合がある。
実装メモ
- 一部の API はセキュアコンテキスト (HTTPS) やユーザー操作起点を必要とする。利用前に要件を確認すること。