これまでのすべての回答は部分的に間違っているか不完全であるように見えます(トピックは複雑で、物事は紛らわしい名前が付けられ、十分に文書化されていません!)、ここに私の理解があります:
によって作成された接続を再利用できるようにするには、<link rel=preconnect>
取得するコンテンツの種類、場所、リクエストがブラウザの資格情報を送信するかどうか(ブラウザが明示的または暗黙的に確立できる)によって異なります。
リクエストは同一オリジンです(example.com
からサブリソースをリクエストしますexample.com
)
そもそも必要はありませんpreconnect
。ブラウザは、ページをしばらくロードした後も接続を開いたままにします。
チェック対象:同一生成元リクエストにcrossorigin
属性がある場合はどうなりますか:使用されているか無視されていますか?
リクエストはクロスオリジンです(example.com
からサブリソースをリクエストしますanother.com
)
- 実際のリクエスト(HTMLまたはJS経由)に
crossorigin
属性が明示的に設定されているcrossOrigin
場合(JSでは大文字と小文字が重要です)、事前接続にも同じ値を指定する必要があります(おそらく、意味がなくcrossorigin
無視された場合を除いて)-まだ完全にはわかりません)
- それ以外の場合、要求された場合
<script type=module>
:チェックされる
- 要求があるとのために、「古い学校」の要求ならば、他の、
<img>
、<style type=stylesheet>
、<iframe>
、古典的な<script>
(HTMLやJSを経由して開始された)など せずにcrossorigin
明示的に指定され、その後、事前接続MUSTは持っていませcrossorigin
属性セットを。
- それ以外の場合、リクエストがクロスオリジンフォントリクエストの場合、事前接続には
crossorigin=anonymous
- それ以外の場合、リクエストがクロスオリジン
fetch
またはXHR
:
- 認証モードで実行される場合(つまり、Cookieが添付されるか、HTTP基本認証が使用されます。フェッチの場合、これはを意味し
credentials !== omit
ますwithCredentials === true
。XHRの場合:):事前接続にはcrossorigin=use-credentials
- 資格証明モードでない場合:事前接続には
crossorigin=anonymous
最後のケース(フェッチ/ XHR)の場合は、Chrome / Firefox devtoolsのネットワークパネルに移動し、リクエストを右クリックcopy as fetch
して、ドロップダウンから選択します。これにより、JSのスニペットが作成され、そのリクエストがCORS対応("mode"=="cors"
)であり、認証されている("credentials"=="include"|"same-origin"
)かどうかがわかります。
ただし、上記のトリックは、XHR /フェッチ以外のリクエストでは正しく機能しないことに注意してください。たとえばfetch
、前述のように、<img>
さまざまなアルゴリズムを使用して接続を確立します。
最後に、HTMLでは<link ...crossorigin>
=== <link ...crossorigin=anonymous>
です。
追加のメモとリンク: