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.com
demandes proviennent de sous-ressources example.com
)
Il n'y a aucun besoin du preconnect
tout 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 crossorigin
attribut: est-elle utilisée ou ignorée?
La demande est d' origine croisée (les example.com
demandes proviennent de sous-ressources another.com
)
- si la demande réelle a un
crossorigin
attribut explicitement défini en HTML ( crossOrigin
dans 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 crossorigin
est 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 crossorigin
explicitement spécifié , le MUST preconnect ne pas avoir crossorigin
ensemble 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 === true
doit 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 fetch
dans 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 fetch
et <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: