* 仕様書

[REFS[
- [22] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2016-06-10 18:36:00 +09:00]]) <https://html.spec.whatwg.org/#link-type-dns-prefetch>
- [8] [CITE@en[Resource Hints]] ([TIME[2016-05-21 01:13:13 +09:00]]) <https://w3c.github.io/resource-hints/#h-dns-prefetch>
- [10] [CITE@en[Resource Hints]] ([TIME[2016-05-21 01:13:13 +09:00]]) <https://w3c.github.io/resource-hints/#h-fetching-the-resource-hint-link>
- [50] [CITE@en[Resource Hints]] ([TIME[2016-05-21 01:13:13 +09:00]]) <https://w3c.github.io/resource-hints/#h-security-and-privacy>
]REFS]

* リンク型 [CODE(HTML)@en[dns-prefetch]]

[25] [[リンク型]] [DFN[[CODE(HTML)@en[dns-prefetch]]]] は、
指定された[[資源]]の[[起源]]にある[[資源]]を[[利用者]]が必要とする可能性が高く、 
予め当該[[起源]]の [[DNS]] [[名前解決]]をしておくことで[[利用者]]の体験を向上させられることを示します [SRC[>>22]]。
これは[[利用者エージェント]]が可能な限り早く行う[SHOULD[べき]]ものです [SRC[>>8]]。

[23] [[リンク型]] [CODE(HTML)@en[dns-prefetch]] は、 [CODE(HTMLe)@en[link]]
[[要素]]で指定でき、[[外部資源リンク]]を作成します [SRC[>>22]]。

[24] この[[リンク型]]は [[body-ok]] です [SRC[>>22]]。つまりこの[[リンク型]]の
[CODE(HTMLe)@en[link]] [[要素]]は、 [CODE(HTMLe)@en[head]] [[要素]]内のみならず、
[CODE(HTMLe)@en[body]] [[要素]]内でも使えます。

[11] [CODE(HTTP)@en[Link:]] [[ヘッダー]]でも指定できます [SRC[>>10]]。

[9] [CODE(HTMLa)@en[href][<link href>]] [[属性]]の [[URL]] に特に制約はありませんが、
[[userinfo]]、[[port][URL port]]、[[query][URL query]]、[[素片][素片識別子]]は指定しても意味が無い可能性が極めて高いです。
[[ネットワークスキーム]]以外の指定も意味が無さそうです。

[53] [[著者]]は、 [CODE(HTML)@en[dns-prefetch]] [CODE(HTMLe)@en[link]] [[要素]]よりも前に関係する
[[CSP]] [CODE(HTMLe)@en[meta]] [[要素]]を置く[SHOULD[べきです]] [SRC[>>50]]。

[54] [[著者]]は、 [CODE(HTML)@en[dns-prefetch]] [CODE(HTTP)@en[Link:]] [[ヘッダー]]を使うなら関係する
[[CSP]] [[ヘッダー]]も含める[SHOULD[べきです]] [SRC[>>50]]。

;; [55] >>53、>>54 に違反すると、処理順序の都合により、
[[CSP]] の制限が適用されないことになります。

* 処理

[49] [[混合内容]]に関して [[optionally blockable]] です [SRC[>>50]]。
これが[[混合内容]]制約に抵触する [[URL]] によって指定された
[[DNS]] [[名前解決]]を行わないべきなのかどうかは明確ではありません。

[51] [[CSP]] 制約が適用されるのかどうか、仕様書上は明確ではありませんが、
趣旨からすると適用されるべきとも考えられます。

;; [12] [[Referrer Policy]] は、[[参照元]]を送信することはないので、関係しません。

[52] 適用するかどうか、[[利用者]]が設定できるようにすることができます [SRC[>>50]]。

[33] [[利用者エージェント]]は、次の [[navigate]] があっても処理を継続する[SHOULD[べきです]] [SRC[>>10]]。[[利用者エージェント]]が必要ないと判断すれば中断できます [SRC[>>10]]。

* アドレスバー

[13] [[アドレスバー]]への[[利用者]]の入力により先読みが行われる場合もあります。
[[アドレスバー]]参照。

* 関連

[14] [CODE[prefetch]] は、更に進んで [[HTTP]] アクセスも行うものです。

* 歴史

[1] [CITE@en-us[Controlling DNS prefetching - MDC]] ([TIME[2009-07-12 21:30:31 +09:00]] 版) <https://developer.mozilla.org/En/Controlling_DNS_prefetching>

[2] [CITE@en[Controlling DNS prefetching - MDC Doc Center]]
( ([TIME[2011-04-02 16:10:25 +09:00]] 版))
<https://developer.mozilla.org/en/controlling_dns_prefetching#Controlling_prefetching_from_content>

[3] [CITE[IRC logs: freenode / #whatwg / 20110310]]
( ([TIME[2011-04-02 03:23:11 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20110310#l-445>

[4] [CITE[DNS Prefetching - The Chromium Projects]]
([TIME[2015-03-21 10:14:33 +09:00]] 版)
<https://www.chromium.org/developers/design-documents/dns-prefetching>

[5] [CITE@ja[プリレンダリングとプリフェッチのサポート (Windows)]]
([TIME[2015-05-07 17:14:26 +09:00]] 版)
<https://msdn.microsoft.com/library/dn265039(v=vs.85).aspx>

[6] [CITE@en[Link relations: add dns-prefetch/preconnect/prerender; update prefetch]]
( ([[domenic]]著, [TIME[2016-04-28 07:26:36 +09:00]]))
<https://github.com/whatwg/html/commit/0f54b54307647ca15ace16ef03c570db1b918193>

[7] [CITE@en[Treat <link rel="next"> as a general resource hint]]
( ([[domenic]]著, [TIME[2016-05-19 16:38:13 +09:00]]))
<https://github.com/whatwg/html/commit/7ff5b096d423bf5750463957aed69680368ed99e>

[15] [CITE@en[Request.destination for `<link rel=prefetch>` · Issue #658 · whatwg/fetch]]
([TIME[2018-05-02 13:12:24 +09:00]])
<https://github.com/whatwg/fetch/issues/658>