事前接続

リンク型 preconnect (HTML)

仕様書

リンク型 preconnect

[25] リンク型 preconnect は、 指定された資源起源にある資源利用者が必要とする可能性が高く、 予め当該起源への接続を開始しておくことで利用者体験を向上させられることを示します >>22

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

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

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

[11] href 属性URL に特に制約はありませんが、 userinfoquery素片は指定しても意味がありません。 (port同じ起源かどうかの検査に使われますから、 全く無意味ではありません。) URL scheme も、 HTTP(S) scheme でなければ無視されるので意味がありません。

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

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

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

[34] 資源URLクライアント側で組み立てる場合で、 サーバーが個別の URL を事前に判断できない場合でも、 その起源がわかっているなら、 preconnect により予めその起源への接続を指示できます。 >>32

[35] 何らかの理由でリダイレクトを挟んで本来のリンク先へと navigate させるときに、本来のリンク先起源への接続を予め用意させることができます。 >>32

処理

[49] 混合内容に関して optionally blockable です >>50。 仕様書上は明確ではありませんが、趣旨からすると、 混合内容制約が適用されるものと思われます。

[51] 仕様書上は明確ではありませんが、趣旨からすると、 CSP 制約が適用されるものと思われます。

[36] 接続段階では参照元を送信することはないので、 Referrer Policy の指定は関係しません。

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

[12] link 要素要素事前接続を開始 (initiate a preconnect) するには、 次のようにしなければなりません >>10

  1. [13] URL を、要素href 属性解決の結果に設定します。
  2. [14] URL が失敗なら、
    1. [17] ここで停止します。
  3. [15] URLschemeHTTP(S) scheme でなければ、
    1. [16] ここで停止します。
  4. [18] 起源を、URL起源に設定します。
  5. [19] 要素crossorigin 属性の状態が匿名で、 起源要素節点文書起源同じ起源でなければ、
    1. [20] credentials を、に設定します。
  6. [21] それ以外なら、
    1. [26] credentials を、に設定します。
  7. [27] 起源credentials について接続を得ます事前とします。

[28] ここで、接続を得るによって新しい接続が確立され、 接続プールで保持されます。以後の fetch接続を得る時にこの接続プールが参照されるので、 事前接続として確立された接続があれば、利用される可能性があります。 なお、接続を得るは通常の HTTP の処理に使う接続を確立するもので、 WebSocket には使われません。つまり事前接続WebSocket には効果がありません。

[31] 利用者エージェントは、その判断により、事前接続を取り消しできます >>29

[33] 利用者エージェントは、次の navigate があっても事前接続を継続するべきです >>29

歴史

[1] Resource Hints ( ( 版)) https://igrigorik.github.io/resource-hints/#preconnect

[2] Resource Hints ( ( 版)) http://www.w3.org/TR/2014/WD-resource-hints-20141021/

[3] Resource Hints ( ( 版)) http://www.w3.org/TR/2014/WD-resource-hints-20141021/

[4] Resource Hints ( 版) http://www.w3.org/TR/2015/WD-resource-hints-20150422/

[5] Resource Hints ( 版) http://www.w3.org/TR/2015/WD-resource-hints-20150422/

[6] Resource Hints ( 版) http://www.w3.org/TR/2015/WD-resource-hints-20150423/

[7] Merge pull request #45 from w3c/preconnect-fetch · w3c/resource-hints@ad3ade9 ( 版) https://github.com/w3c/resource-hints/commit/ad3ade98d93d5cdc71adaed5e99c01ab73e1e9e6

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

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

[37] <link rel=preconnect> の次の行に <link rel=stylesheet> で同じドメイン書いてあるの見たけど意味あんのこれ? どっかの解説サイトか例文配布がなんとなく速くなりそうだと思っててきとーに書いたのがコピペで広まってるだけちゃうん?

[38] 余計な要素1個増えてる分遅くなりそうよね、誤差だろうけど。早くなることはないんちゃう?