aboutsummaryrefslogtreecommitdiff
path: root/files/ja/web/api/fetch_api/basic_concepts/index.html
blob: 08595035d6a005ded77c97a160ce3cee9a0c36ba (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
---
title: Fetch の基本コンセプト
slug: Web/API/Fetch_API/Basic_concepts
tags:
  - API
  - Fetch
  - Fetch API
  - XMLHttpRequest
  - concept
  - guard
  - request
translation_of: Web/API/Fetch_API/Basic_concepts
---
<p>{{DefaultAPISidebar("Fetch API")}}{{draft}}</p>

<div class="summary">
<p><a href="/ja/docs/Web/API/Fetch_API">Fetch</a> は、(ネットワークを超えて)リソースを取得するインターフェイスを提供します。 {{domxref("XMLHttpRequest")}} を使っていた人には馴染み深いでしょうが、より拡張可能で効果的な機能があります。この記事は、Fetch API の基本コンセプトのいくつかを説明します。</p>
</div>

<div class="note">
<p>この記事は随時加筆されます。より良い説明が必要な Fetch コンセプトを見つけた場合、<a href="https://discourse.mozilla-community.org/c/mdn">MDN ディスカッションフォーラム</a><a href="https://wiki.mozilla.org/Matrix">Matrix</a><a href="https://chat.mozilla.org/#/room/#mdn:mozilla.org">MDN WebDocs</a> ルームで誰かに知らせてください。</p>
</div>

<h2 id="概要">概要</h2>

<p>Fetch の核心はインターフェイスの抽象化であり、HTTP {{domxref("Request")}}{{domxref("Response")}}{{domxref("Headers")}}{{domxref("Body")}} のペイロード、そして非同期リソースリクエストの初期化のための {{domxref("GlobalFetch.fetch","global fetch")}} メソッドがその対象です。HTTP の主要コンポーネントが JavaScript オブジェクトとして抽象化されているため、他の API からそれらの機能を利用しやすくなっています。</p>

<p><a href="/ja/docs/Web/API/ServiceWorker_API">Service Worker</a> は Fetch を多用する API の一例です。</p>

<p>Fetch はそれらのリクエストの非同期な性質をもう一歩先へ進めるものです。API は完全に {{jsxref("Promise")}} ベースです。</p>

<h2 id="ガード">ガード</h2>

<p>ガードは {{domxref("Headers")}} オブジェクトの機能で、ヘッダーが使用されている場所に応じて <code>immutable</code><code>request</code><code>request-no-cors</code><code>response</code><code>none</code> の値をとります。</p>

<p>{{domxref("Headers.Headers","Headers()")}}{{glossary("constructor", "コンストラクター")}} を使用して新しい {{domxref("Headers")}} オブジェクトが生成されるとき、ガードは <code>none</code> に設定されます(既定の動作)。{{domxref("Request")}} オブジェクトか {{domxref("Response")}} オブジェクトが生成された場合、関連づけられた {{domxref("Headers")}} オブジェクトのガードは下記のとおり設定されます:</p>

<table class="standard-table">
 <thead>
  <tr>
   <th scope="row">新しいオブジェクト型</th>
   <th scope="col">コンストラクター</th>
   <th scope="col">関連する {{domxref("Headers")}} オブジェクトのガード設定</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td rowspan="2">{{domxref("Request")}}</td>
   <td>{{domxref("Request.Request","Request()")}}</td>
   <td><code>request</code></td>
  </tr>
  <tr>
   <td><code>no-cors</code>{{domxref("Request.mode","mode")}} を設定した {{domxref("Request.Request","Request()")}}</td>
   <td><code>request-no-cors</code></td>
  </tr>
  <tr>
   <td rowspan="2">{{domxref("Response")}}</td>
   <td>{{domxref("Response.Response","Response()")}}</td>
   <td><code>response</code></td>
  </tr>
  <tr>
   <td>{{domxref("Response.error","error()")}} メソッドか {{domxref("Response.redirect","redirect()")}} メソッド</td>
   <td><code>immutable</code></td>
  </tr>
 </tbody>
</table>

<p>ヘッダーのガードは、ヘッダーのコンテンツを変更する {{domxref("Headers.set","set()")}} メソッドと {{domxref("Headers.delete","delete()")}} メソッド、{{domxref("Headers.append","append()")}} メソッドに影響します。ガードが <code>immutable</code>{{domxref("Headers")}} を修正しようとした場合、 <code>TypeError</code> をスローします。しかし、次の場合は動作します:</p>

<ul>
 <li>ガードが <code title="">request</code> で、ヘッダーの <var>name</var>{{Glossary("forbidden header name")}} ではない場合。</li>
 <li>ガードが <code title="">request-no-cors</code> で、ヘッダーの <var>name</var>/<var>value</var>{{Glossary("simple header")}} の場合。</li>
 <li>ガードが <code title="">response</code> で、ヘッダーの <var>name</var>{{Glossary("forbidden response header name")}} ではない場合。</li>
</ul>