Jusqu'à présent, toutes les réponses semblent soit simplifiées, incomplètes ou partiellement erronées (le sujet est complexe, les choses portent un nom confus et ne sont pas bien documentées!), Alors voici ma compréhension:
Pour pouvoir réutiliser la connexion créée par <link rel=preconnect>, les choses dépendent du type de contenu que vous souhaitez récupérer, d'où, si la demande enverra les informations d'identification du navigateur (qui peuvent être établies par le navigateur explicitement ou implicitement):
La demande est de même origine (les example.comdemandes proviennent de sous-ressources example.com)
Il n'y a aucun besoin du preconnecttout en premier lieu; le navigateur maintient la connexion ouverte après avoir chargé la page pendant un bon moment. S'il y a plusieurs connexions à ouvrir, le navigateur décide par lui-même si et combien à ouvrir (selon que le serveur annonce la prise en charge HTTP / 2 dans la négociation TLS, les paramètres du navigateur, etc.)
à vérifier : que faire si une requête de même origine a un crossoriginattribut: est-elle utilisée ou ignorée?
La demande est d' origine croisée (les example.comdemandes proviennent de sous-ressources another.com)
- si la demande réelle a un
crossoriginattribut explicitement défini en HTML ( crossOrigindans JS - la casse est importante), la préconnexion doit également l'avoir, avec la même valeur (peut-être sauf dans les cas où cela n'a pas de sens et crossoriginest ignoré - pas complètement clair pour moi encore)
- sinon, si demande si pour
<script type=module>: à vérifier
- Sinon, si la demande est et « vieille école » demande
<img>, <style type=stylesheet>, <iframe>, classique , <script>etc. (initiée via HTML ou JS) sans crossoriginexplicitement spécifié , le MUST preconnect ne pas avoir crossoriginensemble d'attributs.
- sinon, si la demande est une demande de police d' origine croisée , la préconnexion doit avoir
crossorigin=anonymous
- sinon, si la demande est d' origine croisée
fetch ou XHR:
- si cela se fait en mode authentifié (c'est-à-dire que des cookies sont attachés ou que l'authentification de base HTTP est utilisée; en cas de récupération, cela signifie
credentials !== omit; en cas de XHR:): la préconnexion withCredentials === truedoit avoircrossorigin=use-credentials
- s'il n'est pas en mode accrédité: la préconnexion doit avoir
crossorigin=anonymous
Pour le dernier cas (fetch / XHR), accédez au panneau réseau dans les devtools Chrome / Firefox, cliquez avec le bouton droit sur une demande et choisissez copy as fetchdans une liste déroulante. Cela créera un extrait de JS, qui vous dira si cette demande est compatible CORS ( "mode"=="cors") et authentifiée ( "credentials"=="include"|"same-origin").
Notez cependant que l'astuce ci-dessus ne fonctionne pas correctement pour les demandes non XHR / fetch, car par exemple fetchet <img>utilisez différents algorithmes pour établir la connexion, comme expliqué précédemment.
Enfin, en HTML, <link ...crossorigin>=== <link ...crossorigin=anonymous>.
Notes et liens supplémentaires: