[91] [DFN[[[fetch]]]] は、 [[URL]] などを指定して、それに対応する[[資源]]を取得する操作です。

[152] [[navigate]]、[[画像]]などの埋め込み、 [[XHR]] をはじめとする [[API]] などから呼び出される、
[[Webブラウザー]]を構成する重要な[[アルゴリズム]]の1つです。[[利用者]]の操作や[[著者]]の指示がどのように[[プロトコル]]上のやり取りに変換されるかが
[[fetch]] により記述されています。

* 仕様書

[151] [[fetch]] は、 [DFN[[[Fetch Standard]]]] で規定されています。

[REFS[
- [100] '''[CITE@en-US[Fetch Standard]] ([TIME[2015-10-15 18:48:08 +09:00]] 版) <https://fetch.spec.whatwg.org/>'''
-- [101] [CITE@en-US[Fetch Standard]] ([TIME[2015-10-15 18:48:08 +09:00]] 版) <https://fetch.spec.whatwg.org/#main-fetch>
- [121] [CITE@en[Upgrade Insecure Requests]] ([TIME[2015-10-07 03:24:10 +09:00]] 版) <https://w3c.github.io/webappsec-upgrade-insecure-requests/#upgrade-request>
- [115] [CITE@en[RFC 6797 - HTTP Strict Transport Security (HSTS)]] ([TIME[2015-10-17 03:00:32 +09:00]] 版) <http://tools.ietf.org/html/rfc6797#section-8.3>
- [237] [CITE@en[Service Workers Nightly]] ([TIME[2017-02-25 12:50:35 +09:00]]) <https://w3c.github.io/ServiceWorker/#handle-fetch>
]REFS]

* プロトコル

[48] [[Fetch]] は次の[[プロトコル]]や[[アルゴリズム]]と深く関係しています。
[FIG(short list)[
- [[HTTP]]
-- [[HTTPキャッシュ]]
-- [[HTTP認証]]
-- [[HTTP CORS Protocol]]
-- [CODE[Origin:]]
-- [[HTTPリダイレクト]]
-- [[HSTS]]
-- [[PKP]]
-- [[HTTPクッキー]]
-- [[HTTPS]]
-- [[service identity]]
-- [CODE(HTTP)@en[[[Upgrade-Insecure-Requests:]]]]
-- [[Clear Site Data]]
-- [[優先度]]
-- [[WebSocket]]
-- [[Client Hints]]
- [[FTP]]
- [CODE(DOMi)@en[[[Blob]]]]
- [CODE(URI)@en[[[data:]]]]
- [[SRI]]
- [[CSP]]
- [CODE(HTTP)@en[X-Frame-Options:]]
- [[Referrer Policy]]
- [[port blocking]]
- [[Service Worker]]
- [[MIME Sniffing]]
- [[ハイパーリンクをたどる]]
- [[navigate]]
- [[ダウンロード]]
- [[イベントループ]]
- [[インクリメンタルレンダリング]]
- [[preload scanner]]
- [[NEL]]
- [[投機的fetch]]
- [[再読み込み]]
- [[広告ブロック]]
]FIG]

[203] その他次のような概念があります。
[FIG(short list)[
- [[fetch scheme]]
- [[fetchのabort]]
]FIG]

* 読み込みタイミング

[47] [[HTML]] における [[fetch]] とその後の処理の動作モードの指定や実施タイミングについて、
次の機能が存在または提案されています。
[FIG(short list)[
- [CODE(HTMLa)@en[href=""]]
- [CODE(HTMLa)@en[src=""]]
- [CODE(HTMLa)@en[srcset=""]]
- [CODE(HTMLa)@en[[[defer]]]]
- [CODE(HTMLa)@en[[[async]]]]
- [CODE(HTML)@en[rel=noreferrer]]
- [CODE(HTML)@en[rel=preconnect]]
- [CODE(HTML)@en[[[rel=dns-prefetch]]]]
- [CODE(HTML)@en[[[rel=prefetch]]]]
- [CODE(HTML)@en[[[rel=preload]]]]
- [CODE(HTML)@en[[[rel=prerender]]]]
- [CODE(HTML)@en[rel=next]]
- [[HTML Imports]]
- [CODE(HTMLa)@en[[[lazyload]]]]
- [CODE(HTMLa)@en[[[dependson]]]]
- [CODE(HTMLa)@en[[[loadpolicy]]]]
- [CODE(HTMLa)@en[as=""]]
- [CODE(HTMLa)@en[pr=""]]
- [CODE(HTMLa)@en[crossorigin=""]]
- [CODE(HTMLa)@en[referrerpolicy=""]]
- [CODE(HTML)@en[<meta name=referrer>]]
- [CODE(HTTP)@en[Referrer-Policy:]]
]FIG]

* fetch を使う操作

[92] [[fetch]] を使う操作や機能には、次のものがあります。

[FIG(table)[
:f: 機能
:init: [F[初期化器]]
:dest: [F[終点]]
:csp: 制約する [[CSP]] [[指令]]
:sniff: [[MIME Sniffing]]
:note: 備考

;; :type: [F[型][request type]]

:f: [[navigate]] ([CODE(HTMLe)@en[frame]], [CODE(HTMLe)@en[iframe]])
:init: [[空文字列]]
:type: [[空文字列]]
:dest: [CODE[document]]
:csp: [CODE[child-src]]
:sniff: 
[[あり][computed MIME type]]

:f: [[navigate]] (その他)
:init: [[空文字列]]
:type: [[空文字列]]
:dest: [CODE[document]]
:sniff: 
[[あり][computed MIME type]]

:f: [CODE[rel=prerender]]
:init: [CODE[prerender]]
:csp: [CODE[prefetch-src]]

:f: [CODE(HTMLa)@en[download][download=""]]
:init: [CODE[download]]
:type: [[空文字列]]
:dest: [[空文字列]]

:f: [[名前を付けて保存]]
:init: [CODE[download]]
:type: [[空文字列]]
:dest: [[空文字列]]
:note: >>206

:f: [CODE(DOMm)@en[fetch]]
:init: [[空文字列]]
:type: [[空文字列]]
:dest: [[空文字列]]
:csp: [CODE[connect-src]]

:f: [CODE(DOMi)@en[XMLHttpRequest]]
:init: [[空文字列]]
:type: [[空文字列]]
:dest: [[空文字列]]
:csp: [CODE[connect-src]]

:f: [CODE(DOMm)@en[document.load]]
:init: [[空文字列]]
:type: [[空文字列]]
:dest: [[空文字列]]

:f: [CODE(DOMi)@en[EventSource]]
:init: [[空文字列]]
:type: [[空文字列]]
:dest: [[空文字列]]
:csp: [CODE[connect-src]]

:f: [CODE(DOMi)@en[WebSocket]]
:init: [[空文字列]]
:type: [[空文字列]]
:dest: [[空文字列]]
:csp: [CODE[connect-src]]

:f: [CODE(HTMLa)@en[ping][ping=""]]
:init: [[空文字列]]
:type: [[空文字列]]
:dest: [[空文字列]]
:csp: [CODE[connect-src]]

:f: [CODE(DOMm)@en[setBeacon]]
:init: [[空文字列]]
:type: [[空文字列]]
:dest: [[空文字列]]
:csp: [CODE[connect-src]]

:f: [CODE(HTML)@en[rel=manifest]]
:init: [CODE[manifest]]
:type: [[空文字列]]
:dest: [CODE[manifest]]
:csp: [CODE[manifest-src]]
:note: >>206

:f: [CODE(HTMLe)@en[img]]
:init: [[空文字列]]
:type: [CODE[image]]
:dest: [CODE[image]]
:csp: [CODE[img-src]]
:sniff: [[画像][image sniffing rules]]

:f: [CODE(HTMLa)@en[srcset]]
:init: [CODE[imageset]]
:type: [CODE[image]]
:dest: [CODE[image]]
:csp: [CODE[img-src]]
:sniff: [[画像][image sniffing rules]]

:f: [CODE(HTML)@en[[[<input type=image>]]]]
:init: [[空文字列]]
:type: [CODE[image]]
:dest: [CODE[image]]
:sniff: [[画像][image sniffing rules]]

:f: [[SVG]] [CODE(XMLe)@en[image]]
:init: [[空文字列]]
:type: [CODE[image]]
:dest: [CODE[image]]
:csp: [CODE[img-src]]
:note: >>206

:f: [[favicon]]
:init: [[空文字列]]
:type: [CODE[image]]
:dest: [CODE[image]]
:csp: [CODE[img-src]]
:sniff: [[画像][image sniffing rules]]

:f: [CODE(CSS)@en[background-image]]
:init: [[空文字列]]
:type: [CODE[image]]
:dest: [CODE[image]]
:csp: [CODE[img-src]]
:note: >>206

:f: [CODE(CSS)@en[cursor]]
:init: [[空文字列]]
:type: [CODE[image]]
:dest: [CODE[image]]
:csp: [CODE[img-src]]
:note: >>206

:f: [CODE(CSS)@en[list-style-image]]
:init: [[空文字列]]
:type: [CODE[image]]
:dest: [CODE[image]]
:csp: [CODE[img-src]]
:note: >>206

:f: [CODE(HTMLe)@en[audio]]
:init: [[空文字列]]
:type: [CODE[audio]]
:dest: [CODE[audio]]
:csp: [CODE[media-src]]
:sniff: [[媒体][rules for sniffing audio and video specifically]]

:f: [CODE(HTMLe)@en[video]]
:init: [[空文字列]]
:type: [CODE[video]]
:dest: [CODE[video]]
:csp: [CODE[media-src]]
:sniff: [[媒体][rules for sniffing audio and video specifically]]

:f: [CODE(HTMLe)@en[track]]
:init: [[空文字列]]
:type: [CODE[track]]
:dest: [CODE[track]]
:csp: [CODE[media-src]]
:sniff: [[テキストトラック][テキストトラックのsniffing]]

:f: [CODE(HTMLa)@en[poster]]
:init: [[空文字列]]
:type: [CODE[image]]
:dest: [CODE[image]]

:f: [CODE(CSS)@en[@font-face]]
:init: [[空文字列]]
:type: [CODE[font]]
:dest: [CODE[font]]
:csp: [CODE[font-src]]
:note: >>206

:f: [CODE(HTML)@en[rel=stylesheet]]
:init: [[空文字列]]
:type: [CODE[style]]
:dest: [CODE[style]]
:csp: [CODE[style-src]]

:f: [CODE(CSS)@en[@import]]
:init: [[空文字列]]
:type: [CODE[style]]
:dest: [CODE[style]]
:csp: [CODE[style-src]]

:f: [CODE(HTML)@en[<?xml-stylesheet?>]] ([[CSS]])
:init: [[空文字列]]
:type: [CODE[style]]
:dest: [CODE[style]]
:csp: [CODE[style-src]]
:note: >>77

:f: [CODE(HTML)@en[<?xml-stylesheet?>]] ([[XSLT]])
:init: [CODE[xslt]]
:type: [[空文字列]]
:dest: [CODE[xslt]]
:csp: [CODE[script-src]]
:note: >>206

:f: [[XSLT]] [CODE(XMLe)@en[xslt:include]]
:note: >>77

:f: [[XSLT]] [CODE(XMLe)@en[xslt:import]]
:note: >>77

:f: [[XSLT]] [CODE(XPathFunction)@en[document()]]
:note: >>77

:f: [CODE(HTMLe)@en[script]] ([[古典スクリプト]]、[[モジュールスクリプト]])
:init: [[空文字列]]
:type: [CODE[script]]
:dest: [CODE[script]]
:csp: [CODE[script-src]]

:f: [CODE(JS)@en[[[navigator]] . [[serviceWorker]] . [[register]]]]
:init: [[空文字列]]
:type: [CODE[script]]
:dest: [CODE[serviceworker]]

:f: [CODE(JS)@en[new SharedWorker]] ([[古典スクリプト]]、[[モジュールスクリプト]])
:init: [[空文字列]]
:type: [CODE[script]]
:dest: [CODE[sharedworker]]
:csp: [CODE[child-src]]

:f: [CODE(JS)@en[new Worker]] ([[古典スクリプト]]、[[モジュールスクリプト]])
:init: [[空文字列]]
:type: [CODE[script]]
:dest: [CODE[worker]]
:csp: [CODE[child-src]]

:dest: [CODE[audioworklet]]
:csp: [CODE[script-src]]

:dest: [CODE[paintworklet]]
:csp: [CODE[script-src]]

:f: [CODE(DOMm)@en[importScripts]]
:init: [[空文字列]]
:type: [CODE[script]]
:dest: [CODE[script]]
:csp: [CODE[script-src]]

:f: [CODE(JS)@en[import]], [CODE(JS)@en[import()]] ([CODE(HTMLe)@en[script]])
:init: [[空文字列]]
:type: [CODE[script]]
:dest: [CODE[script]]
:csp: [CODE[script-src]]

:f: [CODE(JS)@en[import]], [CODE(JS)@en[import()]] ([[共有ワーカー]])
:init: [[空文字列]]
:type: [CODE[script]]
:dest: [CODE[sharedworker]]
:csp: [CODE[child-src]]

:f: [CODE(JS)@en[import]], [CODE(JS)@en[import()]] ([[専用ワーカー]])
:init: [[空文字列]]
:type: [CODE[script]]
:dest: [CODE[worker]]
:csp: [CODE[child-src]]

:f: [CODE(HTMLe)@en[object]]
:init: [[空文字列]]
:type: [[空文字列]]
:dest: [CODE[object]]
:csp: [CODE[object-src]]
:sniff:
[[あり][computed MIME type]]、
[[バイナリー][rules for distinguishing if a resource is text or binary]]、
[[画像][rules for sniffing images specifically]] ([[応答]]が[[画像型]]の場合)

:f: [CODE(HTMLe)@en[embed]]
:init: [[空文字列]]
:type: [[空文字列]]
:dest: [CODE[embed]]
:csp: [CODE[object-src]]

:f: [[CSP]] 報告
:init: [[空文字列]]
:type: [[空文字列]]
:dest: [CODE[report]]
:note: >>206

:f: [[NEL]] 報告
:init: [[空文字列]]
:type: [[空文字列]]
:dest: [CODE[report]]
:note: >>206

:f: [[PKP]] の [CODE[[[report-uri]]]]
:note: >>77

:f: [[Certificate Transparency]] の報告
:note: >>77

:f: [CODE[rel=prefetch]]
:csp: [CODE[prefetch-src]]
:init: [CODE[prefetch]]

:f: [CODE[rel=preload]]

:f: [CODE[rel=modulepreload]]

:f: [CODE(DOMi)@en[Notification]] [[アイコン]]等
:init: [[空文字列]]
:type: [[空文字列]]
:dest: [[空文字列]]

:f: [CODE(HTML)@en[<html manifest>]]
:init: [[空文字列]]
:type: [[空文字列]]
:dest: [[空文字列]]

:f: [[application cache download process]] のキャッシュ
:init: [[空文字列]]
:type: [[空文字列]]
:dest: [[空文字列]]

:f: [[obtain the resource]] ([CODE(HTMLe)@en[[[link]]]])
:init: [[空文字列]]
:type: [[空文字列]]
:dest: [[空文字列]]

:f: [[画像]]の[[外部資源リンク]] ([CODE(HTMLe)@en[link]])
:sniff: [[画像][rules for sniffing images specifically]]

:f: [[HLS]]

:f: [CODE[sourceMappingURL]]

:f: [CODE[X-SourceMap:]]

:f: [[OCSP]]
:note: >>77

:f: [[PAC]] の取得
:note: >>77

:f: [[NPAPI]] からの呼び出し
:note: >>77

:f: [[PPAPI]] からの呼び出し
:note: >>77

:f: [[XUL]] からの呼び出し
:note: >>77

:f: [[ブラウザー拡張]]からの呼び出し
:note: >>77

:f: [[プッシュ購読の作成]], [CODE[subscribe]], [CODE[getSubscription]],
[[プッシュ購読の非活性化]]
:note: >>77

:f:
[[Webブラウザー機能のためのfetch]]

]FIG]

[HISTORY[
[FIG(table)[
:f: 機能
:init: [F[初期化器]]
:type: [F[型][request type]]
:dest: [F[終点]]
:csp: 制約する [[CSP]] [[指令]]
:sniff: [[MIME Sniffing]]
:note: 備考

:f: [CODE(HTMLe)@en[applet]]

:f: [[CRLDistributionPoints]]

:f: [[AIA]]
]FIG]
]HISTORY]

[77] 注77: [[fetch]] を使った規定がまだなく、今後 [[fetch]] 
を使う形になるかどうか不明です。

[206] 注206: [[fetch]] を使った[[規定]]がありませんが、 [[Fetch Standard]]
に[[注記]]があります。

[341] [[CSS]] の[[画像]]も [[sniffing]] を行っているはずですが現在それはどこにも規定されていません。

[75] [[スクリプトのfetch]]も参照。

* fetch 操作

[102] [[fetch]] は次のような部分操作により構成されます。
[FIG(list)[
- [[fetch]]
-- [[main fetch]]
--- [[scheme fetch]] (旧 [[basic fetch]])
---- [[HTTP fetch]]
----- [[handle fetch]]
----- [[HTTP-redirect fetch]]
------ [[HTTP-network-or-cache fetch]]
------- [[HTTP-network fetch]]
----- [[CORS-preflight fetch]]
]FIG]

* fetch に相当する操作

[72] [[navigate]] は、 [CODE(URI)@en[[[javascript:]]]] などの処理で
[[fetch]] に相当する操作を定義しています。

;; [[navigate]] 参照。

[73] [[navigate]] は、本来の [[fetch]] のかわりに [[AppCache]] からの [[fetch]]
を行うことがあります。

* handle fetch

[238] [DFN[handle fetch]] は、[[サービスワーカー]]により [[fetch]]
を処理する操作です。[VAR[要求]]と[VAR[続きの処理]]について、
次のようにします。 [SRC[>>237]]

[FIG(steps)[
= [251] [VAR[要求]]が [[potential-navigation-or-subresource request]] の場合、
== [252] [CODE[null]] について[VAR[続きの処理]]を実行し、ここで停止します。
= [246] [VAR[応答]]を、 [CODE[null]] に設定します。
= [247] [VAR[登録]]を、 [CODE[null]] に設定します。
= [248] [VAR[クライアント]]を、 [VAR[要求]]の[F[クライアント][要求クライアント]]に設定します。
= [249] [VAR[予約クライアント]]を、[VAR[要求]]の[F[予約クライアント]]に設定します。
= [250] [VAR[preload応答]]を、新しい[[約束]]に設定します。
= [253] [VAR[要求]]が [[non-subresource request]] の場合、
== [254] 
[FIG(list)[
- [244] [VAR[予約クライアント]]が[[環境設定群オブジェクト]]で、
[VAR[予約クライアント]]が [F[secure context]] で''ない''
- [257] [VAR[要求]]の[F[URL][要求URL]]が [[potentially trustworthy URL]]
で''ない''
- [258] [VAR[要求]]が [[navigation request]] で、
[VAR[要求]]の[F[キャッシュモード]]が[[スーパーリロード]]
]FIG]
... の''いずれか''を満たす場合、
=== [260] [CODE[null]] について[VAR[続きの処理]]を実行し、ここで停止します。
== [261] [VAR[登録]]を、[VAR[要求]]の[F[URL][要求URL]]に関する[[サービスワーカー登録の一致]]の結果に設定します。
== [262] [VAR[登録]]が [CODE[null]] か、
[VAR[登録]]の[F[活性ワーカー]]が [CODE[null]] の場合、
=== [263] [CODE[null]] について[VAR[続きの処理]]を実行し、ここで停止します。
== [264] [VAR[要求]]の[F[終点]]が [CODE[report]] ''以外''の場合、
=== [265] [VAR[予約クライアント]]の[F[活性サービスワーカー]]を、[VAR[登録]]の[F[活性ワーカー]]に設定します。
== [266] 
[FIG(list)[
- [VAR[要求]]が [[navigation request]]
- [VAR[登録]]の[F[navigation preload enabled flag]]が[[真]]
- [VAR[要求]]の[F[メソッド][要求メソッド]]が [CODE[GET]]
]FIG]
... の''すべて''を満たす場合、
=== [267] [VAR[登録]]の[F[活性ワーカー]]の [F[set of event types to handle]] が [CODE[fetch]]
を[[含む][含む (リスト)]]場合、
==== [270] [VAR[preload要求]]を、[VAR[要求]]の[[複製][clone (要求)]]の結果に設定します。
==== [276] [VAR[preload要求]]の[F[サービスワーカー群モード]]を、 
[CODE[none][サービスワーカー群モード]] に設定します。
==== [271] [VAR[preload要求]]の[F[ヘッダーリスト]]に、
新しい[[ヘッダー][HTTPヘッダー]]を追加します。
[FIG(list members)[ [275] [[ヘッダー][HTTPヘッダー]]
: [F[名前][ヘッダー名]] : [CODE[Service-Worker-Navigation-Preload]]
: [F[値][ヘッダー値]] : [VAR[登録]]の [F[navigation preload header value]]
]FIG]
==== [272] [VAR[preload応答オブジェクト]]を、新しい [CODE[Response]] に設定します。
[FIG(list members)[ [273] [CODE[Response]]
: [F[[CODE[Headers]]]] :
[FIG(list members)[ [274] [CODE[Headers]]
: [F[guard]] : [CODE[immutable]]
]FIG]
]FIG]
==== [277] >>278
=== [268] それ以外の場合、
==== [269] [[開発者コンソール]]に警告しても構いません。
== [285] それ以外の場合、
=== [286] [VAR[preload応答]]を、[[未定義]]で[[解決]]します。
= [287] それ以外で、[VAR[要求]]が[[部分資源要求]]の場合、
== [288] [VAR[クライアント]]の[F[活性サービスワーカー]]が [CODE[null]] の場合、
=== [289] [CODE[null]] について[VAR[続きの処理]]を実行し、ここで停止します。
== [290] それ以外の場合、
=== [291] [VAR[登録]]を、[VAR[クライアント]]の[F[活性サービスワーカー]]の
[F[containing service worker registration]] に設定します。
= [292] [VAR[活性ワーカー]]を、[VAR[登録]]の[F[活性ワーカー]]に設定します。
= [293] [VAR[活性ワーカー]]の [F[set of event types to handle]] が
[CODE[fetch]] を[[含ま][含む (リスト)]]''ない''場合、
== [295] [[並列に]]、[VAR[要求]]と[VAR[登録]]の[[ソフト更新]]を必要なら実行します (>>298)。
== [296] [CODE[null]] について[VAR[続きの処理]]を実行し、ここで停止します。
= [303] [VAR[活性ワーカー]]の[F[状態]]が[[活性化中]]なら、
== [304] [VAR[活性ワーカー]]の[F[状態][サービスワーカー]]が[[活性化済み]]になった時に >>305 を実行します。
= [306] それ以外の場合、
== [307] >>305 を実行します。
]FIG]

[278] >>277 では、[[並列に]]、次のようにします [SRC[>>237]]。

[FIG(steps)[
= [279] [VAR[preload要求]]を [[fetch]] します。
[FIG(list members)[
: [VAR[[[process response]]]] : [VAR[応答]]について、
[FIG(steps)[
= [280] [VAR[応答]]の[F[型][応答]]が [CODE[error]] の場合、
== [281] [VAR[preload応答]]を [CODE[TypeError]] について[[拒絶]]します。
= [282] それ以外の場合、
== [283] [VAR[preload応答オブジェクト]]の[F[応答]]を、[VAR[応答]]に設定します。
=
@@ [284] [VAR[preload応答]]を[VAR[preload応答オブジェクト]]について[[解決]]します。
]FIG]
]FIG]
]FIG]

[305] [[活性ワーカー]]を使った処理は、次のようにします [SRC[>>237]]。

[FIG(steps)[
= [308] [VAR[活性ワーカー]]について[[サービスワーカーを走らせる]]処理を実行します。
= [239] [VAR[失敗]]を、[[偽]]に設定します。
= [240] [VAR[respondWith入]]を、[[偽]]に設定します。
= [241] [VAR[イベント取り消し]]を、[[偽]]に設定します。
= [255] [VAR[正常終了]]を、[[偽]]に設定します。
= [309] [[タスクキューに追加]]します。
[FIG(list members)[ 
: [VAR[処理]] :
[FIG(steps)[
= [242] [VAR[要求オブジェクト]]を、新しい [CODE[Request]] に設定します。
[FIG(list members)[ [243] [CODE[Request]]
: [F[要求]] : [VAR[要求]]
]FIG]
= [245] [VAR[要求オブジェクト]]の [F[[CODE[headers]]]] の [F[guard]] を、 [[immutable]] に設定します。
= [310] [VAR[イベント]]を、[[イベントを発火]]した結果に設定します。
[FIG(list members)[
: [VAR[[[インターフェイス][イベントインターフェイス]]]] : [CODE(DOMi)@en[FetchEvent]]
: [VAR[[[イベント型]]]] : [CODE(DOMe)@en[fetch]]
: [VAR[[[取消可能]]]] : [[真]]
: [VAR[[CODE[request]]]] : [VAR[要求オブジェクト]]
: [VAR[[CODE[preloadResponse]]]] : [VAR[preload応答]]
: [VAR[[CODE[clientId]]]] : [VAR[クライアント]]の[F[識別子][環境設定群オブジェクト]]
: [VAR[[CODE[reservedClientId]]]] :
[VAR[要求]]が[[非部分資源要求]]で、
[VAR[要求]]の[F[終点]]が [CODE[report]] 以外なら、
[VAR[予約クライアント]]の[F[識別子][環境設定群オブジェクト]]。
それ以外なら、[[空文字列]]。
: [VAR[[CODE[targetClientId]]]] :
[VAR[要求]]が[[navigation request]]なら、
[VAR[要求]]の[F[対象クライアント識別子]]。
それ以外なら、[[空文字列]]。
: [VAR[[[対象][イベント対象]]]] :
[VAR[活性ワーカー]]の[F[大域オブジェクト]]
]FIG]
= [256] [VAR[正常終了]]を、[[真]]に設定します。
= [311] [VAR[活性ワーカー]]と[VAR[イベント]]について、
[[update service worker extended events set]] を実行します。
= [312] [VAR[イベント]]の [F[respond-with entered flag]] が設定されていれば、
== [313] [VAR[respondWith入]]を、[[真]]に設定します。
= [314] [VAR[イベント]]の [F[wait to respond flag]] が設定されていれば、
== [318]
@@ [VAR[イベント]]の [F[wait to respond flag]] が[[偽]]になったときの処理を >>319
とします。
= [315] それ以外の場合、
== [316] [VAR[イベント]]の[F[取り消し済み]]フラグが設定されていれば、
=== [317] [VAR[イベント取り消し]]を、[[真]]に設定します。
== [328] [[並列に]]、 >>329 を実行します。
]FIG]
: [VAR[[[イベントループ]]]] : [VAR[活性ワーカー]]の[F[イベントループ]]
: [VAR[[[タスク源]]]] : [[handle fetch task source]]
: [VAR[捨てる処理]] : >>329
]FIG]
]FIG]

@@
[319] [VAR[イベント]]の [F[wait to respond flag]] が[[偽]]になったときの処理は、
次のようにします [SRC[>>237]]。

[FIG(steps)[
= [320] [VAR[イベント]]の [F[respond-with error flag]] が[[真]]なら、
== [321] [VAR[失敗]]を、[[真]]に設定します。
= [322] それ以外の場合、
== [323] [VAR[応答]]を、[VAR[イベント]]の [F[potential response]] に設定します。
= [324] [VAR[イベント]]の[F[取り消し済み]]フラグが設定されていれば、
== [325] [VAR[イベント取り消し]]を、[[真]]に設定します。
]FIG]


[329] 最後の処理は、次にようにします [SRC[>>237]]。

[FIG(steps)[
= [259] [VAR[正常終了]]が[[偽]]の場合、
== [294] [VAR[失敗]]を、[[真]]に設定します。
= [331] [VAR[respondWith入]]が[[偽]]の場合、
== [332] [VAR[イベント取り消し]]が[[真]]の場合、
=== [333] [VAR[応答]]を、[[ネットワークエラー]]に設定します。
== [334] それ以外の場合、
=== [335] [VAR[応答]]を、[CODE[null]] に設定します。
= [336] それ以外で、[VAR[失敗]]が[[真]]の場合、
== [337] [VAR[応答]]を、[[ネットワークエラー]]に設定します。
= [338] [VAR[応答]]について[VAR[続きの処理]]を実行します。
]FIG]

[339] 加えて、[[並列に]]、[VAR[要求]]と[VAR[登録]]を必要なら[[ソフト更新]]します
(>>298) [SRC[>>237]]。

;; [326] この最後の処理は、[[サービスワーカーを終端させる]]処理により[[スクリプトの中断]]があった時や[[タスクが捨てられた]]時にも必ず実行されます。

-*-*-

[298] [VAR[要求]]と[VAR[登録]]の必要なら[[ソフト更新]]する処理は、
次のようにします [SRC[>>237]]。

[FIG(steps)[
= [297] [VAR[要求]]が[[非部分資源要求]]か、
[VAR[要求]]が[[部分資源要求]]で
[FIG(math)[
[[現在時刻]] - [VAR[登録]]の [F[last update check time]] [[>]] [N[86400]]
]FIG]
... が[[真]]の場合、
== [299] [VAR[登録]]を[[ソフト更新]]します。
]FIG]

* main fetch

[103] [[main fetch]] は、まず[[要求]]を検査し、
必要ならエラーを返したり、書き換えたりします。具体的には、次の処理が含まれます。
[FIG(list)[
- [[HSTS]] や [CODE(HTTP)@en[[[upgrade-insecure-requests]]]] が適用されるなら、
[[URL]] を [CODE(URI)@en[[[https:]]]] に書き換えます。
- [[CSP]]、[[混合内容]]、[[port blocking]]、外部参照の制約が適用されるなら、[[ネットワークエラー]]を返します。
- [[CSP]] の報告が求められているなら、検査して必要に応じて報告します。
- [[Referrer Policy]] の指定に従って [[referrer]] を設定します。
]FIG]

[141] 正確には、次のようにします [SRC[>>101]]。
[FIG(steps)[
= [104] [VAR[要求]]の[F[[[局所URLのみフラグ]]]]が設定されていれば、
== [105] [VAR[要求]]の[F[[[現在URL]]]]が[[局所URL]]でないなら、
=== [106] [VAR[応答]]を、[[ネットワークエラー]]に設定します。 [SRC[>>101]]
= [140] [[[VAR[要求]]についてCSP違反の報告]]を行います [SRC[>>101]]。
= [107] [DFN[Upgrade [VAR[request]] to an a priori authenticated URL, if appropriate]] [SRC[>>101]]:
== [123] [VAR[要求]]が [[navigation request]] なら、
[FIG(list)[
- [124] [VAR[要求]]の[F[[[URL]]]]が[[a priori insecure]]
- [125] [VAR[要求]]の[F[[[URL]]]]の[F[[[ホスト]]]]が[[preloadable HSTS host]] でない
- [126] その他[[利用者エージェント]]が適切と判断する場合
([[Upgrade-Insecure-Requests]>>53])
]FIG]
... のいずれかの場合、
=== [122] [VAR[要求]]の[F[[[ヘッダーリスト]]]]に名前 [CODE(HTTP)@en[[[Upgrade-Insecure-Requests]]]]
値 [CODE[[[1]]]] の[[ヘッダー]]を[[末尾に追加]]します [SRC[>>121]]。
== [127]
[FIG(list)[
- [132] [VAR[要求]]が [[navigation request]] ではない
- [130] [VAR[要求]]が[[フォーム提出]]である
- [198] [VAR[要求]]の[F[対象閲覧文脈]]が[[入れ子閲覧文脈]]である
- [129] [VAR[クライアント]]の[F[[[非保安navigate格上げ集合]]]]に
([VAR[要求]]の[F[[[URL]]]]の[F[[[ホスト]]]], [VAR[要求]]の[F[[[URL]]]]の[F[[[ポート]]]]) が含まれている
]FIG]
... のいずれかの場合 [SRC[>>121]]、
=== [131] [[[VAR[クライアント]]について非保安要求を格上げするべき]]かどうかが
「格上げしない」でなければ [SRC[>>121]]、
==== [128] [VAR[要求]]の[F[[[URL]]]]の[F[[[scheme]]]] が [CODE[[[http]]]] なら、
===== [133] [VAR[要求]]の[F[[[URL]]]]の[F[[[scheme]]]]を、 [CODE[[[https]]]] に設定します。 [SRC[>>121]]
==== [134] それ以外なら、
===== [135] [VAR[要求]]の[F[[[URL]]]]の[F[[[ポート]]]]が [CODE[[[80]]]] なら、
====== [136] [VAR[要求]]の[F[[[URL]]]]の[F[[[ポート]]]]を、[CODE[[[443]]]] に設定します。 [SRC[>>121]]
= [187] 
[FIG(list)[
- [162] [VAR[要求]]について [[should be blocked due to a bad port]] が「[[blocked]]」
- [108] [[should fetching [VAR[request]] be blocked as mixed content]] が「[[blocked]]」
- [110] [[should fetching [VAR[request]] be blocked by Content Security Policy]] が
「[[blocked]]」
]FIG]
... のいずれかを満たすなら、
== [111] [VAR[応答]]を、[[ネットワークエラー]]に設定します。 [SRC[>>101]]
= [201] [[[VAR[要求]]の[F[参照元]]の決定]]を行います [SRC[>>101]]。
= [232] [VAR[要求]]の[F[現在URL]]の[F[scheme][URL scheme]]が [CODE(URI)@en[ftp][ftp:]] で、
[VAR[要求]]の[F[クライアント][要求クライアント]]の[F[作成元URL]]の[F[scheme][URL scheme]]が
[CODE(URI)@en[ftp][ftp:]] で''ない''上、
[VAR[要求]]の[F[予約済みクライアント]]が [CODE[null]] または[[環境]]であって[F[対象閲覧文脈]]が[[入れ子閲覧文脈]]なら、
== [233] [VAR[応答]]を、[[ネットワークエラー]]に設定します。 [SRC[>>101]]
= [114] 
[FIG(list)[
- [177] [VAR[要求]]の[F[現在URL]]の[F[scheme][URL scheme]]が 
[CODE(URI)@en[http][http:]]
- [178] [VAR[要求]]の[F[現在URL]]の[F[ホスト]]が[[ドメイン]]
- [117] [VAR[要求]]の[F[現在URL]]の[F[ホスト]]が[[既知HSTSホストドメイン一致]]により、
[FIG(list)[
- [118] [[合同一致]]する[[既知HSTSホスト]]が存在する
- [119] [[超ドメイン一致]]する[[既知HSTSホスト]]が存在してその
[CODE(HTTP)@en[[[includeSubDomains]]]] [[指令]]が指定されている
]FIG]
... のいずれかを満たす
]FIG]
... のすべてを満たすなら、
== [179] [VAR[要求]]の[F[現在URL]]の[F[scheme][URL scheme]]を、
[CODE(URI)@en[https][https:]] に設定します [SRC[>>101]]。
]FIG]

;; [116] [[WebSocket]] の場合も [[URL scheme]] が [CODE(URI)@en[https:]]/[CODE(URI)@en[http:]]
に書き換わっているので、 [[HSTS]] が適用されます。

;; [180] [[HSTS]] では[F[現在URL]]の[F[ポート]]は書き換えられません。
[[既定のポート番号]]が省略されている場合[F[ポート]]は [[null]]
なので、 [CODE(URI)@en[http:]] の場合 [CODE[80]] を暗黙に表していたのが、
[CODE(URI)@en[https:]] に書き換わって [CODE[443]] を暗黙に表すのにかわります。

[188] [[アプリ内ブラウザー]]で固有の制約がある場合、ここで検査し、
違反していれば[[ネットワークエラー]]とするのが適当と思われます。

[EG[
[189] [[アプリ内ブラウザー]]は、[[アプリ]]開発者の [[Webサイト]]以外の [[fetch]]
を禁止することがあります。
]EG]

[EG[
[190] [[iOS]] では [[ATS]] により原則として[[素のHTTP]]へのアクセスは禁止されます。
]EG]

;; [300] その他に、 [[navigate]] 側で検査する実装になっている可能性もあります。
[[navigation scope]] 参照。

[120] その後実際の処理に入ります。

* HTTPリダイレクトfetch

[205] [[HTTPリダイレクトfetch]]は、 [[navigate]] からも呼び出されます。


[399] 
仕様書にはないですが、
[[service identitiy]]
エラーになるとき、
[CODE[www.]]
を付け足したり削ったりする内部[[リダイレクト]]に置き換えられることがあります。
[SEE[ [[HTTPS]] ]]


* その他の URL scheme の scheme fetch

[182] [CODE(URI)@en[data:]]、
[CODE(URI)@en[ftp:]]、
[CODE(URI)@en[file:]] を参照。

* ブラウザー依存の処理

[183] [[開発者コンソール]]の機能や、[[ブラウザー拡張]]の [[API]] が、
[[fetch]] の処理の進捗を観察したり、時には介入したりすることがあります。

[FIG(list)[
- [184] 多くの [[Webブラウザー]]の[[開発者コンソール]]は、
[[fetch]] の各段階の時刻や[[要求]]や[[応答]]の詳細などを記録・表示できる機能を持っています。
- [185] [[Chrome拡張]]の [CODE[chrome.webRequest]] [[API]] を使うと、
[[fetch]] の各段階で[[コールバック関数]]を呼び出させることができます。
更には、[[要求]]や[[応答]]を書き換えることもできます。
- [398] [CODE[chrome.declarativeNetRequest]]
]FIG]

[163] [[仕様書]]に明文規定はありませんが、[[再読み込み]]時に (開始から [[stops parsing]]
まで?) 適宜[F[キャッシュモード]]が設定されるようです。

* スケジューリング

[226] [[事前レンダリング]]は、 [[navigate]] を妨げないように [[fetch]]
で配慮するべきである旨の規定があります。

;; [[事前レンダリング]]参照。

* fetch API

[229] [[fetch]] のすべての機能が [[fetch API]] で利用できるわけではありません。

[FIG(short list)[ [230] [[fetch API]] で提供されていない機能
- [[HTTPリダイレクト]]の途中経過
- [CODE[abort]]
-- [[XHR]] にはあり
- [CODE[progress]]
-- [[XHR]] にはあり
- [[同期I/O]]
-- [[XHR]] にはあり
- [CODE[responseXML]]
-- [[XHR]] にはあり
]FIG]

* 歴史

[54] [[fetch]] は [[Webブラウザー]]の必須の処理で、 [[WWW]] の誕生以来ずっと (暗黙的に)
存在していました。 [[navigate]] の一部としては1990年頃の [[WWW]]
の誕生以来、[[ページ]]の[[レンダリング]]の一部としては1994年の [CODE(HTMLe)@en[[[img]]]]
[[要素]]の追加以来、 [[Webブラウザー]]には [[fetch]] 相当の処理が何らかの形で含まれていました。

[142] しかし90年代には、「指定された [[URL]] を[[解決]]して処理する」
程度の曖昧な規定しかありませんでしたし、実際それで十分でした。

** fetch の明文化

[53] 仕様上の[[アルゴリズム]]としての [[fetch]] は、2008年8月に [[HTML5]]
(現 [[HTML Standard]]) で定義されました [SRC[>>57]]。

;; [55] それまで [[HTML5]] は各[[要素]]や [[API]]、[[navigate]] の挙動の規定で[[一般動詞]]
[[fetch]] を使っており、挙動を明確化する必要があるとの [[TODO]]
が記載はされていましたが、仕様上の用語としてはこの時追加されました。

[56] この時期は[[HTMLの構文解析器]]や既存の[[HTML要素]]、[[navigate]] や [[AppCache]]
が [[HTML5]] で規定された後で、[[イベントループ]]や [[WF2]] の統合よりは前に当たります。
それまで明確に文書化されてこなかった [[HTML]] の諸[[要素]]・[[API]]
の挙動を定義していく中での流れでした。 [[fetch]] が定義された後間もなく[[イベントループ]]が定義され、
[[fetch]] との関係も規定されています [SRC[>>52]]。

[59] とはいえこの当時の [[fetch]] は非常に単純で、 [[URL]] を[[解決]]してから
[[HTTP]] の規定に従う、といった程度の内容でした。 [[Webブラウザー]]の挙動を記述するには、
更なる詳細化が必要でした。

[REFS[
- [57] [CITE@en[Web Applications 1.0 r1971 Define fetching. (bug 5848)]]
([TIME[2008-08-02 18:23:00 +09:00]] 版)
<https://html5.org/r/1971>
- [58] [CITE@en[Bug 5848 – Write the "fetching" section]]
([TIME[2015-02-07 01:27:20 +09:00]] 版)
<https://www.w3.org/Bugs/Public/show_bug.cgi?id=5848>
- [52] [CITE@en[Web Applications 1.0 r2074 Define event loops, task queues, etc; Make 'fetching' use this mechanism (everything will in due course); Fix some cross-references around 'interactive content'.]]
([TIME[2008-08-16 09:52:00 +09:00]] 版)
<https://html5.org/r/2074>
]REFS]

[51] [CITE@en[Web Applications 1.0 r2525  CSRF mitigation -- add Origin header to all non-GET requests.]]
([TIME[2008-12-02 20:26:00 +09:00]] 版)
<https://html5.org/r/2525>

[49] [CITE@en[Web Applications 1.0 r4084 Clarify how pushState() and transfering nodes between documents affects Referer: computation in the fetch algorithm.]]
([TIME[2009-10-06 08:39:00 +09:00]] 版)
<https://html5.org/r/4084>

[50] [CITE@en[Web Applications 1.0 r4011 Synchronise with the latest Origin spec rules and semantics.]]
([TIME[2009-09-29 08:51:00 +09:00]] 版)
<https://html5.org/r/4011>

[1] [CITE@en[Web Applications 1.0 r5451     Define how to handle <img src='mailto:foo@example.com'>Fixing http://www.w3.org/Bugs/Public/show_bug.cgi?id=10247]]
( ([TIME[2010-09-09 07:39:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=5450&to=5451>

[2] [CITE[Widget Access Request Policy]]
( ([TIME[2012-02-04 04:00:27 +09:00]] 版))
<http://dev.w3.org/2006/waf/widgets-access/>

[3] [CITE['''['''whatwg''']''' Image cache behaviour]]
([TIME[2012-03-22 13:10:14 +09:00]] 版)
<http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2012-March/035137.html>

[4] [CITE[295942 – Mozilla will ignore javascript-triggered image reload even if image is expired]]
([TIME[2012-03-22 14:20:52 +09:00]] 版)
<https://bugzilla.mozilla.org/show_bug.cgi?id=295942>

[5] [CITE[''''''[''''''whatwg'''''']'''''' '''['''html5''']''' r7128 - '''['''giow''']''' (2) Try to define img synchronous loading. Affected topics: HTML]]
( ([TIME[2012-06-14 02:29:09 +09:00]] 版))
<http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2012-June/036386.html>

[6] [CITE@en[Debunking Responsive CSS Performance Myths - igvita.com]]
( ([[Ilya Grigorik]] 著, [TIME[2012-06-21 08:08:59 +09:00]] 版))
<http://www.igvita.com/2012/06/14/debunking-responsive-css-performance-myths/>

** HTML への CORS の導入

;; [60] これまでの [[CORS]] の歴史は、 [[CORS]] の項を参照。

[7] [CITE@en[Web Applications 1.0 r7297     Cleanup of the 'potentially CORS-enabled fetch' algorithm to actually make sense.]]
( ([TIME[2012-08-30 05:29:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=7296&to=7297>

[8] [CITE@en[Web Applications 1.0 r7341     Attempt to actually define what Referer headers are used for a whole host of things that were poorly defined. Also: cleanup of a bunch of editorial mistakes I found from past such attempts. Mark every fetch algorithm use for sanity in the future. Block data:, javascript:, and about:blank referrers. Note: This relies on not-yet-done changes to CORS and XHR.]]
( ([TIME[2012-09-13 08:14:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=7340&to=7341>

** Fetch Standard

[61] [[Web Applications 1.0]] (現 [[HTML Standard]]) の [[fetch]]
は従来の [[fetch]] に[[猿パッチ]]のような形で [[CORS]] を継ぎ足していたため複雑で、
リファクタリングが必要と言われていましたが、いつどのような形で行うかは未定でした。
[[Ian Hickson]] は改訂の必要性は認めつつも、他の作業より優先度は低いとしていました。

[143] [[annevk]] は2012年夏に ([[Opera]] および) [[W3C]] を離れたのを機に
[[XHR]] や [[CORS]] を [[WHATWG]] に移管しましたが、 [[CORS]] と [[fetch]]
を統合して整理する必要があるとし、 [[WHATWG]] [[CORS]] 仕様書の[[ドメイン名]]に
「fetch」を選びました [SRC[>>9]]。

[9] [CITE@en-US[Cross-Origin Resource Sharing Standard]]
( ([TIME[2012-09-13 21:51:45 +09:00]] 版))
<http://fetch.spec.whatwg.org/>

[10] [CITE[IRC logs: freenode / #whatwg / 20121126]]
( ([TIME[2012-12-09 01:19:22 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20121126>

[144] 2013年には [[annevk]] が実際の作業を開始し、 [[HTML]] の [[Fetch]]
と [[CORS]] と [[XHR]] の中枢部分に相当する一連のアルゴリズムを改めて記述し、
これを [[Fetch Standard]] としました。

[145] 仕様書としての [[CORS]] はこれにより発展的に消滅しました。 [[XHR]]
の中枢部分は [[Fetch]] の一部となり、仕様書としての [[XHR]] は [[API]]
のみの規定となりました。 [[HTML]] の [[Fetch]] は、
移行時にエンバグしないよう慎重に検討する必要があるとして、
この時点では変更されませんでした。そのためこの後2年強にわたり、
[[Fetch Standard]] と [[HTML Fetch]] が併存することとなりました。
(あくまで仕様書として分裂した状態なだけで、実装上は同じものでした。)

[11] [CITE[IRC logs: freenode / #whatwg / 20130211]]
( ([TIME[2013-02-16 17:09:58 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20130211>

[12] [CITE[IRC logs: freenode / #whatwg / 20130225]]
( ([TIME[2013-03-02 19:44:27 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20130225#l-697>

[13] [CITE[IRC logs: freenode / #whatwg / 20130305]]
( ([TIME[2013-03-12 20:47:52 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20130305>

[14] [CITE[IRC logs: freenode / #whatwg / 20130305]]
( ([TIME[2013-03-12 20:47:52 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20130305#l-151>

[15] [CITE[IRC logs: freenode / #whatwg / 20130315]]
( ([TIME[2013-03-27 00:16:47 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20130315#l-704>

[16] [CITE@en[HTTP Fetch Policy - WHATWG Wiki]]
( ([TIME[2013-03-24 05:08:34 +09:00]] 版))
<http://wiki.whatwg.org/wiki/HTTP_Fetch_Policy>

[17] [CITE[IRC logs: freenode / #whatwg / 20130411]]
( ([TIME[2013-04-13 15:40:14 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20130411#l-686>

[18] [CITE[IRC logs: freenode / #whatwg / 20130415]]
( ([TIME[2013-04-19 08:52:25 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20130415#l-416>

[19] [CITE[IRC logs: freenode / #whatwg / 20130418]]
( ([TIME[2013-04-25 21:57:07 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20130418#l-839>

[20] [CITE[IRC logs: freenode / #whatwg / 20130422]]
( ([TIME[2013-05-03 23:39:29 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20130422#l-691>

[21] [CITE[IRC logs: freenode / #whatwg / 20130502]]
( ([TIME[2013-05-12 22:30:49 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20130502>

[22] [CITE[''''''[''''''whatwg'''''']'''''' Fetch: please review!]]
( ([TIME[2013-05-22 09:50:41 +09:00]] 版))
<http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2013-May/039600.html>

[23] [CITE@en[Fetch groups]]
( ([[Anne van Kesteren]] 著, [TIME[2013-06-25 23:09:37 +09:00]] 版))
<http://lists.w3.org/Archives/Public/www-archive/2013Jun/0086.html>

[24] [CITE@en[Re: CSP and Fetch]]
( ([[Anne van Kesteren]] 著, [TIME[2014-01-24 09:36:13 +09:00]] 版))
<http://lists.w3.org/Archives/Public/public-webappsec/2014Jan/0161.html>

** Fetch API

[146] [[XHR]] には引き続き新機能の追加の要望が出ていましたが、
[[XHR]] の歴史的経緯を反映した複雑な [[API]] 
を更に複雑化させることは好ましくないとも考えられていました。
[[Extensible Web]] の流れもあり、 [[Fetch Standard]] の開発中から [[annevk]] らは
(仕様書上の) [[Fetch]] アルゴリズムに近い低レベルの [[API]]
を規定することを考えていました。

[147] [[Service Workers]] の開発で新たな [CODE[[[fetch]]]] [[API]]
の必要性が高まり支持が集まった結果、2014年にはこの [CODE[[[fetch]]]] [[API]]
の規定が [[Fetch Standard]] に追加されました。

;; [148] 初期の議論は [[Service Workers]] の [[GitHub Issues]] で行われています。

[25] [CITE[IRC logs: freenode / #whatwg / 20140520]]
( ([TIME[2014-05-23 19:04:39 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20140520>

[26] [CITE[Sketch for Fetch API, details and organization TBD · b40f990 · whatwg/fetch]]
( ([TIME[2014-05-29 04:54:26 +09:00]] 版))
<https://github.com/whatwg/fetch/commit/b40f99003d31abfe23bbcd84d13e62c52d6267ce>

[27] [CITE[Request constructor and fetch() method, add RedirectResponse named const... · 2e82a88 · whatwg/fetch]]
( ([TIME[2014-05-29 11:05:37 +09:00]] 版))
<https://github.com/whatwg/fetch/commit/2e82a88634f0cd23de1977b11b36d1e907d01f5c>

[28] [CITE[Clean up new Request and fetch() · 97f680c · whatwg/fetch]]
( ([TIME[2014-05-30 02:50:41 +09:00]] 版))
<https://github.com/whatwg/fetch/commit/97f680c318a4b4bdc461ae607f245fe1441b6877>

[29] [CITE[Clean up fetch() steps · 3445fc0 · whatwg/fetch]]
( ([TIME[2014-05-30 02:51:06 +09:00]] 版))
<https://github.com/whatwg/fetch/commit/3445fc0f4f667bd9aa2487351330cea82c93885f>

[30] [CITE@en[Fetch API]]
( ([[Anne van Kesteren]] 著, [TIME[2014-05-29 21:57:01 +09:00]] 版))
<http://lists.w3.org/Archives/Public/public-webapps/2014AprJun/0687.html>

[31] [CITE[Update request's referrer per https://www.w3.org/Bugs/Public/show_bug.cg... · 8ab38bf · whatwg/fetch]]
( ([TIME[2014-06-14 13:51:23 +09:00]] 版))
<https://github.com/whatwg/fetch/commit/8ab38bf62ace6c221c544add7cc188c799d6acc7>

[32] [CITE[IRC logs: freenode / #whatwg / 20140812]]
( ([TIME[2014-08-13 10:20:45 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20140812>

[33] [CITE[Dependencies & weights (aka, priority) - Google ドキュメント]]
( ([TIME[2014-08-15 02:18:51 +09:00]] 版))
<https://docs.google.com/document/d/1jSpWc6jkrUoYtGWcxev9Blkkv9RhoO1XtqinBvXqhgY/edit>

[34] [CITE[Request Quest]]
( ([TIME[2013-06-28 16:18:32 +09:00]] 版))
<http://jakearchibald.github.io/request-quest/>

[35] [CITE@en[Web Applications 1.0 r8799 Stop using the word 'asynchronously', and reduce usage of the word 'synchronous'.]]
( ([TIME[2014-09-20 08:19:00 +09:00]] 版))
<https://html5.org/r/8799>

[36] [CITE@en[Web Applications 1.0 r8846 Rename API referrer source to just referrer source, for fetch]]
( ([TIME[2014-11-08 07:42:00 +09:00]] 版))
<https://html5.org/r/8846>

[37] [CITE[IRC logs: freenode / #whatwg / 20130624]]
( ([TIME[2013-06-29 00:36:47 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20130624>

[38] [CITE[Fetch integration. Please review, this is major. MAJOR. Right. · c99000a · whatwg/xhr]]
( ([TIME[2013-10-30 06:06:33 +09:00]] 版))
<https://github.com/whatwg/xhr/commit/c99000a96dada32b0aed566563c759256f0b2d9a>

[39] [CITE@en[XMLHttpRequest and Fetch]]
( ([[Anne van Kesteren]] 著, [TIME[2013-10-23 01:44:25 +09:00]] 版))
<http://lists.w3.org/Archives/Public/public-webapps/2013OctDec/0237.html>

[40] [CITE[Fetch is the new CORS (and more). Also fix a few minor bugs thanks to @j... · 9b60830 · whatwg/xhr]]
( ([TIME[2014-01-08 07:23:20 +09:00]] 版))
<https://github.com/whatwg/xhr/commit/9b608301704e6360f905e1a93f9310e209fec5a5>

[41] [CITE[Rely more on Fetch. More to come. · a50621b · whatwg/xhr]]
( ([TIME[2014-01-08 07:23:25 +09:00]] 版))
<https://github.com/whatwg/xhr/commit/a50621b2247dc42a2e9521f5055a4d5b71d0685e>

[42] [CITE[Move some request security checks to Fetch so other APIs can do the same... · 126f3db · whatwg/xhr]]
( ([TIME[2014-01-08 07:25:56 +09:00]] 版))
<https://github.com/whatwg/xhr/commit/126f3db30a67ff2be772ae3682206011d89301eb>

[43] [CITE[Flashと特定ブラウザの組み合わせでcross originでカスタムヘッダ付与が出来てしまう問題が未だに直っていない話]]
( ([TIME[2014-02-19 08:05:06 +09:00]] 版))
<https://gist.github.com/mala/8857629>

[44] [CITE[カスタムヘッダを使ったCSRF対策は安全に使えるかどうかということについて - 金利0無利息キャッシング – キャッシングできます - subtech]]
( ([TIME[2014-02-19 08:15:55 +09:00]] 版))
<http://subtech.g.hatena.ne.jp/mala/20130304/1362392723>

[45] [CITE[IRC logs: freenode / #whatwg / 20140515]]
( ([TIME[2014-05-17 18:12:00 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20140515>

[46] [CITE[REFERRER: Cleaning up the integration with Fetch. · 82e1046 · w3c/webappsec]]
( ([TIME[2014-06-16 03:04:34 +09:00]] 版))
<https://github.com/w3c/webappsec/commit/82e1046cd2d00c4b286abdf3a336511207ff9750>


[63] [CITE@en[Extract networking into its own set of steps to prepare for https://www.... · 6c10655 · whatwg/fetch]]
([TIME[2015-02-19 12:30:35 +09:00]] 版)
<https://github.com/whatwg/fetch/commit/6c10655c960d0cd95d739d1604f48c11828e9499>

[64] [CITE@en[Introduce HTTP request grouping for https://www.w3.org/Bugs/Public/show_... · 44546f2 · whatwg/fetch]]
([TIME[2015-02-19 12:31:42 +09:00]] 版)
<https://github.com/whatwg/fetch/commit/44546f2f850bdd49bd08d44ce68188b9ba239a93>

[FIG(quote)[
[FIGCAPTION[
[65] [CITE@en[Chromium Blog: Chrome 42 Beta: Push Notifications, Promoting Add to Home Screen and ES6 Classes]]
([TIME[2015-03-14 09:17:20 +09:00]] 版)
<http://blog.chromium.org/2015/03/chrome-42-beta-push-notifications_12.html>
]FIGCAPTION]

> The Fetch API is now available in the window context, shared workers, and dedicated workers, providing a new promise-based standard for AJAX requests.

]FIG]


[FIG(quote)[
[FIGCAPTION[
[66] ([TIME[2009-08-03 07:55:07 +09:00]] 版)
<http://www.adambarth.com/papers/2009/jackson-barth-bortz-shao-boneh-tweb.pdf>
]FIGCAPTION]

> Prohibited access. Some kinds of network access are prohibited even within
> the same origin. Internet Explorer 7 blocks port numbers 19 (chargen), 21
> (FTP), 25 (SMTP), 110 (POP3), 119 (NNTP), and 143 (IMAP). Firefox 2 and
> Safari 3 block those plus 51 additional port numbers. Some of these port restrictions
> prevent Web sites from launching denial-of-service attacks or sending
> spam email, whereas others prevent universal cross-site scripting via the
> HTML form protocol attack [Topf 2001].

]FIG]


[FIG(quote)[
[FIGCAPTION[
[67] [CITE[IRC logs: freenode / #whatwg / 20150330]]
([TIME[2015-03-31 11:13:04 +09:00]] 版)
<http://krijnhoetmer.nl/irc-logs/whatwg/20150330#l-171>
]FIGCAPTION]

> # '''['''10:39''']''' <JakeA> annevk: when is the right time to make response/request.body a ReadableStream in the fetch spec?
> # '''['''11:08''']''' <annevk> JakeA: I was waiting for "tee" to be defined

]FIG]


[68] [CITE@en[Preparation for merge · Issue #25 · yutakahirano/fetch-with-streams]]
([TIME[2015-03-31 11:14:16 +09:00]] 版)
<https://github.com/yutakahirano/fetch-with-streams/issues/25>

[FIG(quote)[
[FIGCAPTION[
[69] [CITE[IRC logs: freenode / #whatwg / 20150330]]
([TIME[2015-03-31 11:14:58 +09:00]] 版)
<http://krijnhoetmer.nl/irc-logs/whatwg/20150330#l-171>
]FIGCAPTION]

> 
> # '''['''15:42''']''' <wanderview> annevk: at this point I do not feel comfortable implementing that... I'm planning to talk to sicking in a couple weeks to try to iron out our differences
> # '''['''15:45''']''' <annevk> JakeA: given wanderview's statement and not hearing anything from Apple/Microsoft I'm inclined to hold off on integrating streams for now
> # '''['''15:47''']''' <JakeA> annevk: makes sense, wasn't aware of wanderview's concerns
> # '''['''15:47''']''' <wanderview> annevk: I guess to clarify, I'm personally ok with implementing the fetch body stream bit... but I need to address sicking's concerns first... and it feels like we're further away from agreement than I thought before
> # '''['''15:49''']''' <wanderview> JakeA: not my personal concerns... we need some internal consensus before moving forward, though

]FIG]


[70] [CITE@en[Integrate with UPGRADE. Fixes https://www.w3.org/Bugs/Public/show_bug.cg... · whatwg/fetch@fd90b5a]]
([TIME[2015-03-31 11:21:26 +09:00]] 版)
<https://github.com/whatwg/fetch/commit/fd90b5afd0ff09284c2a3cd093c577d17ce06898>

[71] [CITE@en[Prefer GitHub participation. Use URLs that include the scheme. · whatwg/fetch@4b58ddc]]
([TIME[2015-04-06 11:37:17 +09:00]] 版)
<https://github.com/whatwg/fetch/commit/4b58ddc9435411eb5f7698d961e57d512f0f541b>

[74] [CITE@en[Extract main fetch in preparation for setting request headers based on c... · whatwg/fetch@ea4dd32]]
([TIME[2015-05-05 11:07:15 +09:00]] 版)
<https://github.com/whatwg/fetch/commit/ea4dd323c136aa4f348e750811b5e239685fef31>

[78] [CITE@en[Fetch API Streaming Response Sample]]
([TIME[2015-05-27 12:26:34 +09:00]] 版)
<https://googlechrome.github.io/samples/fetch-api/fetch-response-stream.html>

[79] [CITE@en[Write a short introduction. Fixes #11. · whatwg/fetch@8bd9f55]]
([TIME[2015-07-06 11:52:20 +09:00]] 版)
<https://github.com/whatwg/fetch/commit/8bd9f559187281894f65c2a1bdc2ff556aabad1b>

[80] [CITE@en[Re: Definition of secure origin in MIX and POWER]]
([[Mike West]] 著, [TIME[2015-07-09 01:25:53 +09:00]] 版)
<https://lists.w3.org/Archives/Public/public-webappsec/2015Jul/0080.html>

[81] [CITE@en[Support "manual" redirect mode for navigation requests. Fixes #66. · whatwg/fetch@c5dc814]]
([TIME[2015-07-16 13:14:20 +09:00]] 版)
<https://github.com/whatwg/fetch/commit/c5dc81406f588ad6207c61d475c96f7649e40578>

[82] [CITE@en[MIX: First stab at SW integration. · w3c/webappsec@e577d4d]]
([TIME[2015-07-21 11:22:27 +09:00]] 版)
<https://github.com/w3c/webappsec/commit/e577d4d5746bd33248a7dd4dbe0db515c16f20fb>

[83] [CITE@en[MIX: @annevk's feedback on the Service Worker loophole. · w3c/webappsec@048eae9]]
([TIME[2015-07-21 11:22:53 +09:00]] 版)
<https://github.com/w3c/webappsec/commit/048eae9ae720ce412fe5244210e6fd31a1003092>

[84] [CITE@en[MIX: Further explain the SW implications. · w3c/webappsec@4ead56c]]
([TIME[2015-07-21 11:23:35 +09:00]] 版)
<https://github.com/w3c/webappsec/commit/4ead56ce75e24e29bff67e905ce2335026c6a00d>

[85] [CITE@en[Group task annotations and make sure service workers also read a requ… · whatwg/fetch@e2f0a96]]
([TIME[2015-07-28 12:08:05 +09:00]] 版)
<https://github.com/whatwg/fetch/commit/e2f0a96fafa782b2ca5a0ac7fdf98f5ae4c1f3f9>

** HTML との統合

[149] 2015年9月にはついに [[HTML Fetch]] が廃止され、 [[Fetch Standard]]
に完全に統合されました。

[150] 更に、 [[CSP]] も [[Fetch Standard]] や [[HTML Standard]] 
のアルゴリズムとの関係が明確になる形で再編成が進みました。

[86] [CITE@en[Remove "block cookies" as XMLHttpRequest already uses Fetch · whatwg/html@2f0c615]]
([TIME[2015-09-08 15:03:46 +09:00]] 版)
<https://github.com/whatwg/html/commit/2f0c6156aa4d825e007b26600e42716e32d12b86>

[87] [CITE@en[Fetch integration · Issue #95 · whatwg/html]]
([TIME[2015-09-08 15:12:03 +09:00]] 版)
<https://github.com/whatwg/html/issues/95>

[88] [CITE@en[Drafting the patches to HTML · Issue #106 · whatwg/fetch]]
([TIME[2015-09-08 15:13:06 +09:00]] 版)
<https://github.com/whatwg/fetch/issues/106>

[89] [CITE@en[24080 – (fetch) Integrate with Fetch specification]]
([TIME[2015-09-17 14:45:03 +09:00]] 版)
<https://www.w3.org/Bugs/Public/show_bug.cgi?id=24080>

[90] [CITE@en[Integrate Fetch into HTML · whatwg/html@7c5555a]]
([TIME[2015-09-18 17:51:59 +09:00]] 版)
<https://github.com/whatwg/html/commit/7c5555a16f2920c02244c10756bb2f1a11e87a22>

[93] [CITE@en[Only replace charset parameter values that do not case-insensitively … · whatwg/xhr@a1f8e14]]
([TIME[2015-09-22 11:22:20 +09:00]] 版)
<https://github.com/whatwg/xhr/commit/a1f8e140fef9e3ee8255ef58a2c71ff9d75933d2>

[94] [CITE[IRC logs: freenode / #whatwg / 20151005]]
([TIME[2015-10-06 13:05:31 +09:00]] 版)
<http://krijnhoetmer.nl/irc-logs/whatwg/20151005>

[95] [CITE@en[Fiddling with Fetch to catch synthetic responses. · w3c/webappsec-csp@a5e2d3b]]
([TIME[2015-10-07 13:48:36 +09:00]] 版)
<https://github.com/w3c/webappsec-csp/commit/a5e2d3b6c595a23be70ddb28d468ace3059c40ff>

[96] [CITE@en[Update Fetch with shiny, new CSP hooks · whatwg/fetch@8ce550b]]
([TIME[2015-10-16 14:30:10 +09:00]] 版)
<https://github.com/whatwg/fetch/commit/8ce550b53c53e2b6e8376373b94d66b2eeada8f8>

[97] [CITE@en[Drop Fetch issues after https://github.com/whatwg/fetch/commit/8ce550… · w3c/webappsec-csp@c2b6452]]
([TIME[2015-10-16 14:31:38 +09:00]] 版)
<https://github.com/w3c/webappsec-csp/commit/c2b64522fb6f4cb4f683344ee3cd890dfdcc515d>

[98] [CITE@ja[MFSA 2015-115: Fetch を用いたクロスオリジン制限回避]]
([TIME[2015-10-16 05:37:35 +09:00]] 版)
<http://www.mozilla-japan.org/security/announce/2015/mfsa2015-115.html>

[99] [CITE@en[Fetch & Streams meeting]]
([[Anne van Kesteren]] 著, [TIME[2015-10-08 18:52:51 +09:00]] 版)
<https://lists.w3.org/Archives/Public/www-archive/2015Oct/0002.html>

[137] [CITE@en[Close #141: fix 304 handling · whatwg/fetch@1a2f6b4]]
([TIME[2015-11-01 19:39:23 +09:00]] 版)
<https://github.com/whatwg/fetch/commit/1a2f6b49d616cfd74536c1a8dbed8b5c1215d548>

[138] [CITE@en[Split reporting and enforcement for Fetch. · w3c/webappsec-csp@6647d2d]]
([TIME[2015-11-08 15:43:42 +09:00]] 版)
<https://github.com/w3c/webappsec-csp/commit/6647d2de191283e94cec1059411f536e6d6b95b5>

[139] [CITE@en[Separate 'report-only' and 'enforce' CSP execution · whatwg/fetch@a58871a]]
([TIME[2015-11-08 15:50:02 +09:00]] 版)
<https://github.com/whatwg/fetch/commit/a58871a92cbf9304ea4e661f31efb9f2b78bf44b>

[153] [CITE@en[Foreign Fetch - WHATWG Wiki]]
([TIME[2015-07-20 13:04:28 +09:00]] 版)
<https://wiki.whatwg.org/wiki/Foreign_Fetch>

[154] [CITE@en[Fix #176: move a set of steps in HTTP-network fetch · whatwg/fetch@bcf66dd]]
([TIME[2015-12-16 12:20:49 +09:00]] 版)
<https://github.com/whatwg/fetch/commit/bcf66dd5cd98762d4313948c8f3da475b492dbb5>

[155] [CITE@en[Fix #171: main fetch: clarify internal responses and network errors · whatwg/fetch@200e745]]
([TIME[2016-01-09 11:58:00 +09:00]] 版)
<https://github.com/whatwg/fetch/commit/200e745dcba07874a1db25d3ba2be2339a3a0430>

[156] [CITE@en[Introduce HTTP-redirect fetch · whatwg/fetch@3e501f2]]
([TIME[2016-02-06 12:46:40 +09:00]] 版)
<https://github.com/whatwg/fetch/commit/3e501f29eceff41eb81c60fb9937e33e23cf5492>

[157] [CITE@en[Expand Request.destination · whatwg/fetch@6b9cdaa]]
([TIME[2016-02-16 11:15:05 +09:00]] 版)
<https://github.com/whatwg/fetch/commit/6b9cdaa9be7acd2b8074c74823981ef994d17857>

[158] [CITE@en[Clarify main fetch recursive invocation · whatwg/fetch@88fb8d4]]
([TIME[2016-02-19 15:50:14 +09:00]] 版)
<https://github.com/whatwg/fetch/commit/88fb8d48f248396cb9c1876d0f13e682519cffa9>

[160] [CITE@en[Clarify the hooks into RFC6265 · whatwg/fetch@5a324a8]]
([TIME[2016-03-01 11:27:53 +09:00]] 版)
<https://github.com/whatwg/fetch/commit/5a324a891c42d42de09a01e03c3a063b9a4f882b>

** WebSocket 統合

[62] 2016年3月に [[WebSocket]] の接続確立処理が [[Fetch Standard]] に統合されました。

;; [76] これは、従来の [[RFC]] の定義を近年の関連仕様の整備・実装に合わせて改訂することが
[[IETF]] の手続き上困難であること、接続の確立までの部分で他の [[Fetch]]
と共通の処理が多いことが理由とされています。

[164] この統合と同時に、従来 [[WebSocket]] でのみ曖昧に規定されていた [[port blocking]]
が厳密な形で [[Fetch]] 全体に適用されるよう改めて規定されました。

;; [170] [[WebSocket]] のプロトコル全体を [[HTML]] に再統合するべきとの意見もありましたが
[SRC[[[IRC]] #whatwg]]、ひとまずは[[猿パッチ]]という形で先送りされています。
元々 [[HTML5]] の一部だったプロトコル部分が [[IETF]] に移管された後、
[[仕様書]]として技術的に不正確で [[HTML]] との整合性も欠く形に改訂されて [[RFC]]
として出版され、容易に改訂もできない状態になってしまっているとして、
[[WHATWG]] 近辺ではずっと不満が燻っています。

[REFS[
- [165] [CITE@en[Define the WebSocket client handshake in terms of Fetch · whatwg/fetch@ce16adc]] ([TIME[2016-03-11 23:43:03 +09:00]] 版) <https://github.com/whatwg/fetch/commit/ce16adc5c13b56b0f8a6487c71fb030a9bccafce>
- [166] [CITE@en[Fix #238: excellent WebSocket nits · whatwg/fetch@a8392d0]] ([TIME[2016-03-11 23:43:18 +09:00]] 版) <https://github.com/whatwg/fetch/commit/a8392d0933ea7d771ed86acd4734e735eb81e8ac>
- [167] [CITE@en[Fix #240: one more WebSocket nit · whatwg/fetch@f3e1da8]] ([TIME[2016-03-11 23:43:26 +09:00]] 版) <https://github.com/whatwg/fetch/commit/f3e1da80e141cf2c92ba921ed07873ea726cf9a9>
- [168] [CITE@en[Define the WebSocket subprotocol check as part of response validation · whatwg/fetch@08f8560]] ([TIME[2016-03-11 23:43:36 +09:00]] 版) <https://github.com/whatwg/fetch/commit/08f8560f6cecaedc1c3372f9fff1ee39c3bfc86f>
- [161] [CITE@en[Define port blocking · whatwg/fetch@eb07418]]
([TIME[2016-03-11 21:10:53 +09:00]] 版)
<https://github.com/whatwg/fetch/commit/eb07418c8383983a9887498e49a2e2e986d3c9f4>
- [169] [CITE@en[Update WebSocket to use Fetch's WebSocket alterations · whatwg/html@3dadbca]] ([TIME[2016-03-11 23:43:45 +09:00]] 版) <https://github.com/whatwg/html/commit/3dadbcad063a10b586ef52dd4b427aa339048ee7>
]REFS]


[171] [CITE@en-US[Archive]]
([TIME[2016-03-14 19:54:07 +09:00]] 版)
<https://mailarchive.ietf.org/arch/msg/hybi/2OIyLSs5JjDfiFB_I_HGoSinsqc>

[172] [CITE@en[Editorial: remove HSTS reference · whatwg/html@96be6c0]]
([TIME[2016-03-16 14:16:17 +09:00]] 版)
<https://github.com/whatwg/html/commit/96be6c02315d677c48ac334a689a48cbd1929c95>

[173] [CITE@en[Block `image/*` resources loaded as script · whatwg/fetch@b561a73]]
([TIME[2016-03-25 13:43:41 +09:00]] 版)
<https://github.com/whatwg/fetch/commit/b561a73f23b7139d5f4bb0de322dc37e74af0091>

[174] [CITE@en[Editorial: make wait a concept for bodies instead of responses · whatwg/fetch@1873eda]]
([TIME[2016-03-26 11:52:38 +09:00]] 版)
<https://github.com/whatwg/fetch/commit/1873edac285df87c495b1966d8fdb2fd7ba733b2>

[175] [CITE@en[Allow for a request to finish after a response starts to arrive · whatwg/fetch@3a41b6f]]
([TIME[2016-03-26 11:54:15 +09:00]] 版)
<https://github.com/whatwg/fetch/commit/3a41b6f04996d4aac13ecad5b38635827dcd0df3>

[176] [CITE@en[Fix #244: improve HSTS language · whatwg/fetch@6568ab8]]
([TIME[2016-03-27 22:44:50 +09:00]] 版)
<https://github.com/whatwg/fetch/commit/6568ab88c1fbfb581f63f8e5f020c367ef38e78d>

[186] [CITE@en[Update request's referrer policy when fetching · whatwg/fetch@2812f6a]]
([TIME[2016-04-15 22:32:30 +09:00]] 版)
<https://github.com/whatwg/fetch/commit/2812f6aa873968002215b284e05d01715560400b>

[191] [CITE@en[Editorial: use HTML's new WindowOrWorkerGlobalScope mixin · whatwg/fetch@115858e]]
([TIME[2016-04-16 15:26:06 +09:00]] 版)
<https://github.com/whatwg/fetch/commit/115858e1aabab346d03bb93644cd06cd9c2f88ed>

[192] [CITE[''''''[''''''webkit-dev'''''']'''''' Fetch API]]
([TIME[2015-12-11 09:18:16 +09:00]] 版)
<https://lists.webkit.org/pipermail/webkit-dev/2015-December/027838.html>

[193] [CITE@en[Bug 151937 – ''''''[''''''META'''''']'''''' Implement fetch API]]
([TIME[2016-04-21 11:59:13 +09:00]] 版)
<https://bugs.webkit.org/show_bug.cgi?id=151937>

[194] [CITE@en-US[Fetch API - Web APIs | MDN]]
([TIME[2016-03-28 19:17:41 +09:00]] 版)
<https://developer.mozilla.org/en/docs/Web/API/Fetch_API>

[195] [CITE@en[Editorial: remove double-negative in CORS-preflight fetch · whatwg/fetch@f9a540b]]
([TIME[2016-04-24 11:18:28 +09:00]] 版)
<https://github.com/whatwg/fetch/commit/f9a540bd002679bfa238f2fddf5543e7ac9b0d11>

[196] [CITE@en[Rewrite Fetch integration, especially around redirects · w3c/webappsec-referrer-policy@4d227ee]]
([TIME[2016-05-01 13:44:17 +09:00]] 版)
<https://github.com/w3c/webappsec-referrer-policy/commit/4d227ee81961b21913915632614039f076200961>

[197] [CITE@en[Framed navigational requests ought to be upgraded.]]
( ([[mikewest]]著, [TIME[2016-05-11 18:22:43 +09:00]]))
<https://github.com/w3c/webappsec-upgrade-insecure-requests/commit/3af8187ce9f63a2b7a012bc5a6e60e63ef994f93>

[199] [CITE@en[Align with MIX's terminology.]]
( ([[mikewest]]著, [TIME[2016-05-11 18:40:15 +09:00]]))
<https://github.com/w3c/webappsec-upgrade-insecure-requests/commit/0839792b07b7920aefa28cb15935dec423b7cea8>

[200] [CITE@en[Allow more wildcards in CORS when used without credentials]]
( ([[annevk]]著, [TIME[2016-05-24 18:42:09 +09:00]]))
<https://github.com/whatwg/fetch/commit/cdbb13c08650b10c9ebfc54d046bec0639e7ba7c>

[109] [CITE@en[Editorial: use network and HTTP(S) scheme concepts]]
( ([[annevk]]著, [TIME[2016-05-30 21:46:40 +09:00]]))
<https://github.com/whatwg/fetch/commit/a7e7af28629938544d1b705225d04776261a2ff4>

[112] [CITE@en[Web Application Security Working Group F2F -- 17 May 2016]]
( ([TIME[2016-05-18 09:49:47 +09:00]]))
<https://www.w3.org/2016/05/17-webappsec-minutes.html#item07>

[113] [[Chrome]] は、 [CODE(URI)@en[ftp:]] [[URL]] の [CODE[fetch]]
を未対応として[[例外]]を投げます。 ([[XHR]] ではアクセスできます。
[[ディレクトリー]]の場合、整形した [[HTML]] にアクセスできます。) 
[TIME[2016-06-11T12:55:29.000Z]]

[159] [[Firefox]] は、 [CODE(URI)@en[ftp:]] [[URL]] でも [CODE[fetch]]
に対応しています。[[ディレクトリー]]の場合、内部形式らしきテキストデータが返されます。
[CODE(HTTP)@en[Content-Type]] は [CODE(MIME)@en[application/http-index-format]]
となります。
[TIME[2016-06-11T12:56:35.300Z]]

[FIG(quote)[
[FIGCAPTION[
[202] [CITE@en-US[Chrome incompatibilities - Mozilla | MDN]]
( ([TIME[2016-06-14 10:15:04 +09:00]]))
<https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Chrome_incompatibilities>
]FIGCAPTION]

> webRequest
> Firefox does not support:
> onAuthRequired
> filtering by windowId and tabId
> the "requestBody" instruction in opt_extraInfoSpec
> In Firefox requests can be redirected only if their original URL uses the http or https scheme

]FIG]


[204] [CITE@en[Align Fetch's destination concept with changes in Fetch]]
([[sideshowbarker]]著, [TIME[2016-07-05 02:46:14 +09:00]])
<https://github.com/whatwg/html/commit/5e8f96a85d182d36c177db0d6fdde58b4ded86d4>

[207] [CITE@en[Call out to Referrer Policy to set policy on redirect]]
([[estark37]]著, [TIME[2016-07-16 02:22:13 +09:00]])
<https://github.com/whatwg/fetch/commit/a8f1cd5ae2d080ee4e1e8e02b68e8ec6ae2c2833>

[208] [CITE@en[Omit Referer header when referrer is "no-referrer"]]
([[annevk]]著, [TIME[2016-07-25 20:32:24 +09:00]])
<https://github.com/whatwg/fetch/commit/7feaed2cc1d4ac97ea6a3f47ab6aa50e7377e161>

[209] [CITE@en[Editorial: rename end-of-file to end-of-body]]
([[annevk]]著, [TIME[2016-07-27 21:46:17 +09:00]])
<https://github.com/whatwg/fetch/commit/483ffd8c4984b306a262f3b11711747023c0d395>

[210] [CITE@en[Editorial: rename end-of-file to end-of-body]]
([[annevk]]著, [TIME[2016-07-27 21:48:36 +09:00]])
<https://github.com/whatwg/xhr/commit/e8b02e0733c82725e9d1bd4f635cd6ac4fbab5cd>

[211] [CITE@en[Add Foreign Fetch support]]
([[mkruisselbrink]]著, [TIME[2016-06-29 05:29:32 +09:00]])
<https://github.com/whatwg/fetch/commit/8510b2f52d576af6a6c683620878eb3e39e14954>

[212] [CITE@en[Set response tainting (back) to "basic" when same-origin]]
([[annevk]]著, [TIME[2016-08-10 17:15:12 +09:00]])
<https://github.com/whatwg/fetch/commit/3c99e7f8c9eef73f8070e71fabc74e2630834729>

[213] [CITE@en[Move 401/407 into the network realm]]
([[annevk]]著, [TIME[2016-08-10 21:09:30 +09:00]])
<https://github.com/whatwg/fetch/commit/ec6f5ef5f99cb6b0dd6c701b49791810fb380b04>

[214] [CITE@en[Remove credentials flag from HTTP-network-or-cache-fetch]]
([[annevk]]著, [TIME[2016-08-10 21:34:03 +09:00]])
<https://github.com/whatwg/fetch/commit/40755522e2573b3df1d1b54d1bc2e2705f4feccf>

[215] [CITE@en[Add trailer support to network responses]]
([[annevk]]著, [TIME[2016-08-10 15:12:40 +09:00]])
<https://github.com/whatwg/fetch/commit/427255ebd4b07c4912292dbb3a24f97bfa8d1c8a>

[216] [CITE@en[Stop usage of entry settings object]]
([[annevk]]著, [TIME[2016-08-11 21:53:49 +09:00]])
<https://github.com/whatwg/fetch/commit/24db2d37e4d952343ce5319a1684cbd0319e144e>

[217] [CITE@en[26533 – Generalize Request object further]]
([TIME[2016-08-25 12:04:17 +09:00]])
<https://www.w3.org/Bugs/Public/show_bug.cgi?id=26533>

[218] [CITE@en[Copy referrer policy concept and enum from Fetch (#64)]]
([[estark37]]著, [TIME[2016-08-26 06:17:41 +09:00]])
<https://github.com/w3c/webappsec-referrer-policy/commit/7e44fb850385ab9bbe22d13a53721e419a278c87>

[219] [CITE@en[Editorial: referrer policy definitions moved to Referrer Policy]]
([[annevk]]著, [TIME[2016-08-26 17:31:31 +09:00]])
<https://github.com/whatwg/fetch/commit/8243753e527088eb97f11af025cb930f18be0269>

[220] [CITE@en[Treat data URLs as same-origin]]
([[annevk]]著, [TIME[2016-09-16 02:50:19 +09:00]])
<https://github.com/whatwg/fetch/commit/6f223de29733e64dbe1dfc6028c6e0a4a5d89398>

[221] [CITE@en[Stop treating about URLs as same-origin]]
([[annevk]]著, [TIME[2016-09-14 22:34:34 +09:00]])
<https://github.com/whatwg/fetch/commit/72fc2e787be663f5bc39c88665dd3c356abbca0f>

[222] [CITE@en[Make Request constructor more forgiving]]
([[annevk]]著, [TIME[2016-09-27 18:59:04 +09:00]])
<https://github.com/whatwg/fetch/commit/76578f456797ff675f4f89cb8727bde3954e062c>

[223] [CITE@en[Allow fetch() to outlive document/workers]]
([[igrigorik]]著, [TIME[2016-10-13 17:05:20 +09:00]])
<https://github.com/whatwg/fetch/commit/5d745b240554f7871beed99ce443bf13968839c4>

[224] [CITE[Fetch Standard 101 — Anne’s Blog]]
([TIME[2016-10-18 13:03:55 +09:00]])
<https://annevankesteren.nl/2016/07/fetch-101>

[225] [CITE@en[Editorial: convert to bikeshed]]
([[dontcallmedom]]著, [TIME[2016-10-25 16:42:24 +09:00]])
<https://github.com/whatwg/fetch/commit/18523ac90a53e44ac4c32a48b04104bad442a1ae>

[227] [CITE@en-US[Enforcing Content Security By Default within Firefox | Mozilla Security Blog]]
([TIME[2016-11-10 20:41:06 +09:00]])
<https://blog.mozilla.org/security/2016/11/10/enforcing-content-security-by-default-within-firefox/>

[228] [CITE@en[Meta: update spec deploy and editing infrastructure]]
([[annevk]]著, [TIME[2017-02-02 21:34:37 +09:00]])
<https://github.com/whatwg/fetch/commit/948505d35344cd99599f52458ad8898e99ce2afc>

[231] [CITE@en[Block ftp URL requests from non-FTP clients]]
([[mikewest]]著, [TIME[2017-02-17 18:40:46 +09:00]])
<https://github.com/whatwg/fetch/commit/d4114a3b0926fda64a7708d4ec56c6d007b5d133>

[234] [CITE@en[Meta: enable PR review and link web-platform-tests]]
([[annevk]]著, [TIME[2017-02-22 20:33:49 +09:00]])
<https://github.com/whatwg/fetch/commit/ff8a3e9b2e5842e80139d343cc0b587b07963d5c>

[235] [CITE@en[Stop lowercasing header names]]
([[annevk]]著, [TIME[2017-02-22 20:01:22 +09:00]])
<https://github.com/whatwg/fetch/commit/5869c43a27fff06c6dfc228fe1288018f7f2168d>

[236] [CITE@en[Breaking: redo value parsing as value extraction]]
([[annevk]]著, [TIME[2017-02-22 23:42:59 +09:00]])
<https://github.com/whatwg/fetch/commit/68a986772901fe74f666f76a389dbc56cac1ad21>

[301] [CITE@en[Sitebound: Fetch bits and pieces.]]
([[mikewest]]著, [TIME[2017-03-16 22:37:13 +09:00]])
<https://github.com/w3c/webappsec-credential-management/commit/07ef0c83e986884d9d1a81898688700cdca11af4>

[302] [CITE@en[Do not always set the recursive flag in HTTP-redirect fetch]]
([[annevk]]著, [TIME[2017-03-07 22:56:45 +09:00]])
<https://github.com/whatwg/fetch/commit/869ec2c2224200988bbc604f7f5181b6bb9df2c3>

[327] [CITE@en[Properly set the Origin header for WebSocket requests]]
([[nox]]著, [TIME[2017-03-27 20:35:48 +09:00]])
<https://github.com/whatwg/fetch/commit/406c5a60595c63d323693050b45d40823933e185>

[330] [CITE@en[Queue "process request body" tasks during request body transmission]]
([[yutakahirano]]著, [TIME[2017-05-02 19:36:51 +09:00]])
<https://github.com/whatwg/fetch/commit/afcf3fafd5f633d5783ae847280e2a91f24b23d7>

[340] [CITE@en[Editorial: rename "basic fetch" to "scheme fetch"]]
([[jugglinmike]]著, [TIME[2017-05-03 22:55:22 +09:00]])
<https://github.com/whatwg/fetch/commit/ef03683734705e6ca95d3d829df4e47689bf7ae4>

[FIG(quote)[
[FIGCAPTION[
[342] [CITE@en[Creating Safari Content-Blocking Rules]]
([TIME[2017-06-06 17:06:34 +09:00]])
<https://developer.apple.com/library/content/documentation/Extensions/Conceptual/ContentBlockingRules/CreatingRules/CreatingRules.html#//apple_ref/doc/uid/TP40016265-CH2-SW1>
]FIGCAPTION]

> block
> Tells the browser engine to abort loading the resource. If the resource was cached, the cache is ignored.

]FIG]


[FIG(quote)[
[FIGCAPTION[
[343] [CITE@en[Creating Safari Content-Blocking Rules]]
([TIME[2017-06-06 17:08:07 +09:00]])
<https://developer.apple.com/library/content/documentation/Extensions/Conceptual/ContentBlockingRules/CreatingRules/CreatingRules.html#//apple_ref/doc/uid/TP40016265-CH2-SW1>
]FIGCAPTION]

> make-https
> Changes a URL from http to https before making a server request. URLs with a specified port (other than the default port 80) and links using other protocols are not affected.

]FIG]


[344] [CITE@en[Use "read a chunk" operation correctly]]
([[yutakahirano]]著, [TIME[2017-08-02 17:44:19 +09:00]])
<https://github.com/whatwg/fetch/commit/c5a1394a5658b364c75f9b304be745ccab1734ea>

[345] [CITE@en["reading a chunk" passes stream rather than a reader · Issue #570 · whatwg/fetch]]
([TIME[2017-08-03 15:08:57 +09:00]])
<https://github.com/whatwg/fetch/issues/570>

[346] [CITE@en[Use "read a chunk" operation correctly by yutakahirano · Pull Request #571 · whatwg/fetch]]
([TIME[2017-08-03 15:09:13 +09:00]])
<https://github.com/whatwg/fetch/pull/571>

[347] [CITE@en[Remove "foreign" service-workers mode]]
([[annevk]]著, [TIME[2017-09-04 23:19:09 +09:00]])
<https://github.com/whatwg/fetch/commit/bc235291b8ab572a2285fede598dadc2f419b32e>

[348] [CITE@en[Editorial: remove "rethrow" per Infra]]
([[annevk]]著, [TIME[2017-09-04 18:11:21 +09:00]])
<https://github.com/whatwg/fetch/commit/829e56dd47534b8e6725ce0c56c5bdea6e23d222>

[349] [CITE@en[Abortable fetch]]
([[jakearchibald]]著, [TIME[2017-09-20 21:59:57 +09:00]])
<https://github.com/whatwg/fetch/commit/0bcd5dfc71ef44319873887f4b83119bd6d0b71d>

[350] [CITE@en[History behind the decision to make fetch return a Promise · Issue #611 · whatwg/fetch]]
([TIME[2017-10-01 23:51:42 +09:00]])
<https://github.com/whatwg/fetch/issues/611>

[351] [CITE@en[Fetch API]]
([TIME[2017-10-01 23:53:12 +09:00]])
<https://gist.github.com/wycats/cf73dd4c974352fcb767>

[352] [CITE@en[History behind the decision to make fetch return a Promise · Issue #611 · whatwg/fetch]]
([TIME[2017-11-25 15:30:10 +09:00]])
<https://github.com/whatwg/fetch/issues/611>

[353] [CITE@en[Acknowledge Yehuda Katz by annevk · Pull Request #615 · whatwg/fetch]]
([TIME[2017-11-25 15:30:28 +09:00]])
<https://github.com/whatwg/fetch/pull/615>

[354] [CITE@en[Meta: use new WHATWG boilerplate and license]]
([[domenic]]著, [TIME[2018-01-04 08:41:22 +09:00]])
<https://github.com/whatwg/fetch/commit/6478fc0428f7bdd081b860e91fb6886b1a030d19>

[355] [CITE@en[Meta: use new WHATWG boilerplate and license by domenic · Pull Request #651 · whatwg/fetch]]
([TIME[2018-01-07 13:32:04 +09:00]])
<https://github.com/whatwg/fetch/pull/651>

[356] [CITE@en[Return a network error for mode "no-cors" and redirect mode not "follow"]]
([[youennf]]著, [TIME[2018-01-23 21:23:16 +09:00]])
<https://github.com/whatwg/fetch/commit/14858d3e9402285a7ff3b5e47a22896ff3adc95d>

[357] [CITE@en[Return a network error in case of no-cors mode and redirect being not follow by youennf · Pull Request #663 · whatwg/fetch]]
([TIME[2018-01-24 12:58:17 +09:00]])
<https://github.com/whatwg/fetch/pull/663>

[358] [CITE@en[Define data: URL processing]]
([[annevk]]著, [TIME[2018-01-31 17:58:59 +09:00]])
<https://github.com/whatwg/fetch/commit/36ef3c8aef34ff77ebf713b6498d008fe853034f>

[181] [CITE@en[Implement window.fetch into core · Issue #19393 · nodejs/node]]
([TIME[2018-03-29 21:41:15 +09:00]])
<https://github.com/nodejs/node/issues/19393>

[359] [CITE@en[Editorial: set response's CSP list once]]
([[annevk]]著, [TIME[2018-04-17 20:27:15 +09:00]])
<https://github.com/whatwg/fetch/commit/860922f2c393c1b5408af7a80771c665b69a5bf7>

[360] [CITE@en[Should "set response's CSP list" be in Main fetch? · Issue #364 · whatwg/fetch]]
([TIME[2018-04-18 13:47:37 +09:00]])
<https://github.com/whatwg/fetch/issues/364>

[361] [CITE@en[Set response's CSP list once by annevk · Pull Request #701 · whatwg/fetch]]
([TIME[2018-04-18 13:47:50 +09:00]])
<https://github.com/whatwg/fetch/pull/701>

[362] [CITE@en[Only allow blob: URLs that point to Blob objects]]
([[annevk]]著, [TIME[2018-04-18 20:58:25 +09:00]])
<https://github.com/whatwg/fetch/commit/8193ffef20b659a1ec1e6ae58831dd40fc08aad9>

[363] [CITE@en[Make fetch() use "same-origin" credentials by default]]
([[annevk]]著, [TIME[2018-04-20 23:04:51 +09:00]])
<https://github.com/whatwg/fetch/commit/811575d6889026c68d55a327f79198dccfea403c>

[364] [CITE@en[Use the explicit "follow" construct for abort signals]]
([[jakearchibald]]著, [TIME[2018-02-15 03:37:27 +09:00]])
<https://github.com/whatwg/fetch/commit/ae716822cb3a61843226cd090eefc6589446c1d2>

[365] [CITE@en["If signal is not null, then add the following a..." · Issue #668 · whatwg/fetch]]
([TIME[2018-05-08 21:26:55 +09:00]])
<https://github.com/whatwg/fetch/issues/668>

[366] [CITE@en[Following signals. Fixes #668. by jakearchibald · Pull Request #670 · whatwg/fetch]]
([TIME[2018-05-08 21:27:04 +09:00]])
<https://github.com/whatwg/fetch/pull/670>

[367] [CITE@en[Allow range header to be set by APIs by jakearchibald · Pull Request #560 · whatwg/fetch]]
([TIME[2018-06-01 21:53:29 +09:00]])
<https://github.com/whatwg/fetch/pull/560>

[368] [CITE@en[Fix variable definitions and scoping]]
([[jakearchibald]]著, [TIME[2018-05-31 00:57:13 +09:00]])
<https://github.com/whatwg/fetch/commit/3055f137275c92defe7b5526ff633194dd8c6224>

[369] [CITE@en[Abort refactoring led to variable errors · Issue #706 · whatwg/fetch]]
([TIME[2018-06-04 16:28:52 +09:00]])
<https://github.com/whatwg/fetch/issues/706>

[370] [CITE@en[Fixing variable definitions and scoping. Fixes #706. by jakearchibald · Pull Request #749 · whatwg/fetch]]
([TIME[2018-06-04 16:29:04 +09:00]])
<https://github.com/whatwg/fetch/pull/749>

[371] [CITE@en[Review Draft Publication: June 2018]]
([[annevk]]著, [TIME[2018-06-21 22:42:04 +09:00]])
<https://github.com/whatwg/fetch/commit/e6cbef27724dd6111d1646898ef4f3f9ad56740b>

[372] [CITE@en[Review Draft Publication: June 2018 by annevk · Pull Request #768 · whatwg/fetch]]
([TIME[2018-06-22 14:56:39 +09:00]])
<https://github.com/whatwg/fetch/pull/768>

[373] [CITE@en[Fetch Standard Review Draft June 2018]]
([TIME[2018-06-22 01:39:58 +09:00]])
<https://fetch.spec.whatwg.org/review-drafts/2018-06/>

[374] [CITE@en[Editorial: use "append" to modify the header list]]
([[ryzokuken]]著, [TIME[2018-09-10 21:41:01 +09:00]])
<https://github.com/whatwg/fetch/commit/daca6a824c0c6c5e22b7f7eb70001f36c1732cb1>

[375] [CITE@en[Editorial: use Infra maps for dictionaries]]
([[annevk]]著, [TIME[2018-08-20 22:33:04 +09:00]])
<https://github.com/whatwg/fetch/commit/3ca2ee5968a60883c9e302f296047d539337b6dd>

[376] [CITE@en[Use request's client instead of source's active document (#365)]]
([[andypaicu]]著, [TIME[2018-11-19 18:30:10 +09:00]])
<https://github.com/w3c/webappsec-csp/commit/5730913006762928a91facf69b31d7b8b99ab167>

[377] [CITE@en[Use request's client instead of the source browsing context to get a navigation initiator's CSP list by andypaicu · Pull Request #365 · w3c/webappsec-csp]]
([TIME[2019-04-19 14:41:34 +09:00]])
<https://github.com/w3c/webappsec-csp/pull/365>

[378] [CITE@en[Using active document of a browsing context introduces a security vulnerability · Issue #360 · w3c/webappsec-csp]]
([TIME[2019-04-19 14:41:50 +09:00]])
<https://github.com/w3c/webappsec-csp/issues/360>

[379] [CITE@en[Take tainted origin flag into account for the same origin check]]
([[annevk]]著, [TIME[2018-11-20 18:09:39 +09:00]])
<https://github.com/whatwg/fetch/commit/986618a62b2d7d31f93177ed178f0cb21b570d85>

[380] [CITE@en[fetch() "no-cors": cross-origin to same-origin redirect taints response · Issue #737 · whatwg/fetch]]
([TIME[2019-04-19 14:43:13 +09:00]])
<https://github.com/whatwg/fetch/issues/737>

[381] [CITE@en[Request's tainted origin flag fallout · Issue #756 · whatwg/fetch]]
([TIME[2019-04-19 14:43:32 +09:00]])
<https://github.com/whatwg/fetch/issues/756>

[382] [CITE@en[Take tainted origin flag into account for the same origin check by annevk · Pull Request #834 · whatwg/fetch]]
([TIME[2019-04-19 14:43:48 +09:00]])
<https://github.com/whatwg/fetch/pull/834>

[383] [CITE@en[Review Draft Publication: December 2018]]
([[annevk]]著, [TIME[2018-12-11 20:53:12 +09:00]])
<https://github.com/whatwg/fetch/commit/4973765a84b2626c6144deabb95b54f775f85c5d>

[384] [CITE@en[Review Draft Publication: December 2018 by annevk · Pull Request #847 · whatwg/fetch]]
([TIME[2019-05-31 14:46:09 +09:00]])
<https://github.com/whatwg/fetch/pull/847>

[385] [CITE@en[Fetch Standard Review Draft December 2018]]
([TIME[2018-12-12 10:02:42 +09:00]])
<https://fetch.spec.whatwg.org/review-drafts/2018-12/>

[386] [CITE@en[Introduce browsing context groups]]
([[annevk]]著, [TIME[2019-02-23 01:17:56 +09:00]])
<https://github.com/whatwg/html/commit/0e6d3b51ba8f555a700301abff81085f31500fea>

[387] [CITE@en[Remove "filesystem" URL scheme]]
([[M-ZubairAhmed]]著, [TIME[2019-02-23 01:52:17 +09:00]])
<https://github.com/whatwg/fetch/commit/265974fd666d365c164d0337faf2dccfe5867ee7>

[388] [CITE@en[Remove "filesystem" URL scheme · Issue #846 · whatwg/fetch]]
([TIME[2019-07-15 20:27:42 +09:00]])
<https://github.com/whatwg/fetch/issues/846>

[389] [CITE@en[Fixed Issue-846 : remove URL filesystem scheme by M-ZubairAhmed · Pull Request #873 · whatwg/fetch]]
([TIME[2019-07-15 20:30:00 +09:00]])
<https://github.com/whatwg/fetch/pull/873>

[390] [CITE@en[Remove Client Hints]]
([[annevk]]著, [TIME[2019-03-23 18:25:39 +09:00]])
<https://github.com/whatwg/fetch/commit/6a644c676558edc7e80548e25c6f85bf0143f395>

[391] [CITE@en[Does Client Hints have multi vendor support? · Issue #867 · whatwg/fetch]]
([TIME[2019-07-24 20:42:27 +09:00]])
<https://github.com/whatwg/fetch/issues/867>

[392] [CITE@en[Remove Client Hints by annevk · Pull Request #884 · whatwg/fetch]]
([TIME[2019-07-24 20:42:57 +09:00]])
<https://github.com/whatwg/fetch/pull/884>

[393] [CITE@en[Review Draft Publication: June 2019]]
([[annevk]]著, [TIME[2019-06-17 16:46:42 +09:00]])
<https://github.com/whatwg/fetch/commit/4dcfe90b45350c5d73d00c86154ae492656d7be5>

[394] [CITE@en[Review Draft Publication: June 2019 by annevk · Pull Request #910 · whatwg/fetch]]
([TIME[2020-01-12 14:47:44 +09:00]])
<https://github.com/whatwg/fetch/pull/910>

[395] [CITE@en[Fetch Standard Review Draft June 2019]]
([TIME[2019-06-19 14:12:51 +09:00]])
<https://fetch.spec.whatwg.org/review-drafts/2019-06/>

[396] [CITE@en[Align with IDL constructor changes]]
([[autokagami]]著, [TIME[2019-09-24 22:59:53 +09:00]])
<https://github.com/whatwg/fetch/commit/eff7659a2cb15aed801a9dbfc00c58e22efbbd42>

[397] [CITE@en[Make the Origin header honor Referrer Policy (outside of CORS)]]
([[JuniorHsu]]著, [TIME[2019-06-27 18:38:15 +09:00]])
<https://github.com/whatwg/fetch/commit/cc80ec58d24668413b7a3c7160d9b4d83ace7b20>

[400] [CITE@en[Editorial: remove the CORS flag]]
([[annevk]], [TIME[2019-11-11 19:02:42 +09:00]], [TIME[2021-03-16T07:19:54.000Z]])
<https://github.com/whatwg/fetch/commit/65138f3f20a80020e405c5a0fb3675abfd884013>

[401] [CITE@en[Editorial: mention the tainted origin flag less]]
([[annevk]], [TIME[2019-11-14 17:43:45 +09:00]], [TIME[2021-03-16T07:31:10.000Z]])
<https://github.com/whatwg/fetch/commit/2f496b506f82d21383298aaa54779299b6541d38>

[402] [CITE@en[Question about tainted origin flag · Issue #953 · whatwg/fetch]]
([TIME[2021-03-16T07:31:31.000Z]])
<https://github.com/whatwg/fetch/issues/953>

[403] [CITE@en[Editorial: mention the tainted origin flag less by annevk · Pull Request #963 · whatwg/fetch]]
([TIME[2021-03-16T07:31:59.000Z]])
<https://github.com/whatwg/fetch/pull/963>

[404] [CITE@en[Fetch · Issue #9 · w3c/whatwg-coord]]
([TIME[2021-10-05T09:54:16.000Z]])
<https://github.com/w3c/whatwg-coord/issues/9>

[405] [CITE@en[Add TAO check]]
([[npm1]], [TIME[2019-12-04 19:41:07 +09:00]], [TIME[2022-01-18T11:47:33.000Z]])
<https://github.com/whatwg/fetch/commit/9dd531988b04f4fadd43022a0613a90b42ce46d4>

[406] [CITE@en[Add TAO check by npm1 · Pull Request #955 · whatwg/fetch]]
([TIME[2022-01-18T11:49:42.000Z]])
<https://github.com/whatwg/fetch/pull/955>