prefetch

リンク型 prefetch (HTML)

仕様書

リンク型 prefetch

[25] リンク型 prefetch は、 指定された資源利用者が必要とする可能性が高く、 予めこれを fetch してキャッシュしておくのが有用である (fetch するべき >>17) と示します >>22

[23] リンク型 prefetch は、 link 要素で指定でき、外部資源リンクを作成します >>22

[26] Link: ヘッダーでも指定できます >>21

[24] このリンク型body-ok です >>22。つまりこのリンク型link 要素は、 head 要素内のみならず、 body 要素内でも使えます。

[53] 著者は、 prefetch link 要素よりも前に関係する CSP meta 要素を置くべきです >>50

[54] 著者は、 prefetch Link: ヘッダーを使うなら関係する CSP ヘッダーも含めるべきです >>50

[55] >>53>>54 に違反すると、処理順序の規定より、 CSP の制限が適用されないことになります。

[32] ページ分けされた次のページや、検索結果の高順位など、利用者の次の行動が予測できるときに投機的fetchを行わせることができます。 >>30

[34] navigate 先のページで埋め込まれる重要な資源が予めわかっている場合、 navigate 開始と同時に prefetch リンクを挿入して予め fetch を開始させることができます。 >>30

処理

[46] fetch は、obtain the resource によります >>21

[49] 混合内容に関して optionally blockable です >>50

[51] CSPReferrer Policy が適用されます >>50

[52] 適用するかどうか、利用者が設定できるようにすることができます >>50

[28] 現在の navigate の処理への干渉するべきではありません。 そのために fetch を遅延させて構いません。 >>21

[18] 利用者エージェントは、指定された資源前処理するべきではありません。 現在のページの文脈で自動的に実行・適用してはなりません>>17

[20] 前処理というのは、 prerender のような処理を指していると思われます。

[19] as, crossorigin が処理に反映されます。

[31] 利用者エージェントは、その判断により、投機的fetchを取り消しできます >>21

[33] 利用者エージェントは、次の navigate があっても投機的fetchを継続するべきです >>21

[29] obtain the resource により load/error イベント発火されることになっています。しかし投機的fetch の実行のタイミングは実装依存ですし、完全には処理されないかもしれません。 従ってできるだけ適切に発火するべきですが、 発火しなくても構いませんし、完全に処理せずとも発火することも認められています >>27

アドレスバー

[35] アドレスバーへの利用者の入力により先読みが行われる場合もあります。 アドレスバー参照。

歴史

[1] Link Prefetching FAQ <http://www.mozilla.org/projects/netlib/Link_Prefetching_FAQ.html>

[2] Link prefetching FAQ - MDC ( 版) <https://developer.mozilla.org/ja/Link_prefetching_FAQ>

[3]

<link rel="prefetch alternate stylesheet" title="Designed for Mozilla" href="mozspecific.css">

>>2 より。これ他のブラウザでも動くの?

[4] FireFox先読み機能対策(X-Moz : prefetch) - Yaibeen (yaibeen 著, 版) <http://nucleus.yaibeen.com/item245.html>

FireFox 1.5系のブラウザで当サイト(Nucleus)へアクセスするとページを表示させる度にxml-rss2.phpへのアクセスが発生します。 原因はFireFoxの機能である『先読み』であることはわかりました。※FireFox 2.0.0.2では同現象は確認できませんでした。 サーバへの負荷が気になるのでxml-rss2.phpへ対策用のコードを加えて(&修正)みました。 Nucleus側で『先読み:X-Moz: Prefetch』であることを判別し、2回目以降の先読みはレスポンスとして『HTTP/1.0 304 Not Modified』を返却します。これで転送量削減と、サーバへの負荷軽減になると思います。

ちなみにFireFox 2.0.0.2ではライブブックマークの更新時は『X-Moz:livebookmarks』という値を送信しているようです。1.5.0.10では『livebookmarks』という値は確認できませんでした。livebookmarksで購読者数のチェック等に使えるかもしれませんね。

[5] 2002年12月の XHTML2 仕様案でリンク型の ISSUE として prefetch が検討対象として挙げられています。

[6] HTML5 Revision Tracker ( 版) <http://html5.org/tools/web-apps-tracker?from=5247&to=5248>

[7] [whatwg] Support of link rel=prefetch ( ( 版)) <http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2012-December/038481.html>

[8] Web Developer's Guide to Prerendering in Chrome - Google Chrome — Google Developers ( ( 版)) <https://developers.google.com/chrome/whitepapers/prerender?hl=ja>

[9] XML Binding Language (XBL) 2.0 ( ( 版)) <http://www.w3.org/TR/2007/CR-xbl-20070316/#the-prefetch>

[10] Add manifest and prefetch contexts. https://www.w3.org/Bugs/Public/show_... · ca784a7 · whatwg/fetch ( ( 版)) <https://github.com/whatwg/fetch/commit/ca784a76050352fbc4ceb61e39ae71475197398c>

[11] プリレンダリングとプリフェッチのサポート (Windows) ( 版) <https://msdn.microsoft.com/library/dn265039(v=vs.85).aspx>

[12] Merge pull request #53 from w3c/prefetch-relationship · w3c/preload@ab0f23c ( 版) <https://github.com/w3c/preload/commit/ab0f23ca8aadf5aef94de62f03b1e23ef7510b56>

[13] 'prefetch' is erroniously listed as optionally-blockable. · w3c/webappsec-mixed-content@01cc333 ( 版) <https://github.com/w3c/webappsec-mixed-content/commit/01cc3336c1e87ebc1bfd6d5f02e87042c07e279e>

[14] Allow pingback/prefetch/stylesheet links in body · whatwg/html@179983e ( 版) <https://github.com/whatwg/html/commit/179983e9eb99efe417349a40ebb664bd11668ddd>

[15] Link relations: add dns-prefetch/preconnect/prerender; update prefetch ( (domenic著, )) <https://github.com/whatwg/html/commit/0f54b54307647ca15ace16ef03c570db1b918193>

[16] Treat <link rel="next"> as a general resource hint ( (domenic著, )) <https://github.com/whatwg/html/commit/7ff5b096d423bf5750463957aed69680368ed99e>

[36] Introduce 'prefetch-src'. (#283) (mikewest著, ) <https://github.com/w3c/webappsec-csp/commit/91adc4ab7beb21bcc05e3ebeeb035d2745c7817d>

[37] Specify behavior of prefetch requests · Issue #107 · w3c/webappsec-csp () <https://github.com/w3c/webappsec-csp/issues/107>

[38] Introduce 'prefetch-src'. Closes w3c/webappsec-csp#107. by mikewest · Pull Request #283 · w3c/webappsec-csp () <https://github.com/w3c/webappsec-csp/pull/283>

[39] Add prefetch and prerender initiators (yoavweiss著, ) <https://github.com/whatwg/fetch/commit/d5d084096392f2c47841308952a76751bafdd375>

[40] Add a `prefetch` initiator by yoavweiss · Pull Request #659 · whatwg/fetch () <https://github.com/whatwg/fetch/pull/659>

[41] Introduce 'prefetch-src'. Closes w3c/webappsec-csp#107. by mikewest · Pull Request #283 · w3c/webappsec-csp () <https://github.com/w3c/webappsec-csp/pull/283>

[42] Request.destination for `<link rel=prefetch>` · Issue #658 · whatwg/fetch () <https://github.com/whatwg/fetch/issues/658>

[43] 【注意】ブラウザの先読み機能による大量アクセスについて - 電子ジャーナル・電子ブックを使う - Keio University LibGuides at Keio University Media Center / 慶應義塾大学メディアセンター () <https://libguides.lib.keio.ac.jp/e-resource/link-prefetching>

最近、Webブラウザの「リンク先読み機能」により、利用者が意図せずとも、大量ダウンロード/大量アクセスを起こしてしまうケースが頻発しています。

「リンク先読み機能」では、ページを閲覧中に、バックグラウンドでページ内のリンクへのアクセスが繰り返されます。そのため、本人は普通に電子ジャーナルを利用していたつもりでも、気が付かないうちに大量ダウンロード/大量アクセスになってしまうことがあります。

以下の設定変更により、この機能を無効にしていただきますよう、ご協力をお願いいたします。

特にMicrosoft Edgeでの発生事例が多く報告されていますので、ご注意ください。