Je voudrais inclure quelques conseils de ressources de préconnexion sur mon site afin que les navigateurs puissent (par exemple) se connecter au CDN jQuery avant de voir réellement la balise de script qui appelle le CDN. Je ne sais pas si je dois inclure l'attribut «crossorigin» ou quelle devrait être sa valeur. La spécification dit, en partie,
Pour lancer une préconnexion, l'agent utilisateur doit exécuter ces étapes:
[…]
- Soit corsAttributeState l'état actuel de l'
crossorigin
attribut content de l'élément .- Soit les informations d'identification une valeur booléenne définie sur
true
.- Si corsAttributeState est
Anonymous
et que l' origine n'est pas égale à l'origine du document actuel, définissez les informations d'identification surfalse
.- Essayez d'obtenir une connexion avec l' origine et les informations d'identification .
Je ne sais pas comment interpréter cet algorithme. Si je me connecte à un CDN, ce qui permettra à quiconque de télécharger son contenu sans aucune sorte d'informations d'identification, quelle valeur dois-je utiliser pour l'attribut «crossorigin»?
html
performance
cross-origin
bdesham
la source
la source
Réponses:
Je cherchais la même chose et j'ai trouvé ça
Il indique ici que si vous n'utilisez pas l'attribut cross origin, l'agent utilisateur effectue simplement la recherche DNS mais n'établit pas de connexion avec le domaine particulier. L'attribut crossorigin est donc nécessaire si vous devez vous pré-connecter au domaine croisé, comme ceci:
De plus, si vous souhaitez envoyer des informations d'identification à ce domaine croisé particulier, vous pouvez définir la valeur sur crossorigin,
crossorigin = use-credentials
sinon je pense que la valeur par défaut est anonyme.la source
crossorigin
gaspillera également une connexion, car une nouvelle connexion doit être ouverte qui n'utilise pas CORS.Jusqu'à présent, je comprends l'utilisation de
crossorigin
, en particulier en termes de valeursanonymous
etuse-credentials
, vous devez utilisercrossorigin="use-credentials"
au cas où:En plus de la documentation que vous avez citée, j'ai ceci et cela . Mais en effet, la documentation est trompeuse et contient des fautes d'orthographe: la première l'appelle
use-credentials
, la seconde -user-credentials
.Quoi qu'il en soit, à ma connaissance:
crossorigin
du tout égalcrossorigin="anonymous"
crossorigin
équivaut àcrossorigin="use-credentials"
Peut-être que quelqu'un me corrigerait.
PS : La version actuelle de la page Mozilla au sujet signifie:
Moyens: pas
crossorigin
du tout,crossorigin
oucrossorigin="use_credentials"
sont tous traités commecrossorigin="anonymous"
.la source
crossorigin
est égal àcrossorigin="anonymous"
.Cela dépend de deux choses:
Pour jQuery, vous n'utiliseriez pas
crossorigin
. Les scripts ne font pas partie des types de ressources que les navigateurs utilisent CORS pour télécharger .Les polices, en revanche, utilisent CORS.
crossorigin
attribut.crossorigin
. SiVoici le post Stack Overflow où j'ai rencontré le même problème.
Je n'ai pas plongé dans quand les informations d'identification CORS sont nécessaires. Je n'ai pas vu d'exemple où ils sont nécessaires, donc il y a de
crossorigin
fortes chances que vous soyez en sécurité (c'est-à-dire `crossorigin =" anonyme ").la source
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-ressourcesexample.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-ressourcesanother.com
)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 etcrossorigin
est ignoré - pas complètement clair pour moi encore)<script type=module>
: à vérifier<img>
,<style type=stylesheet>
,<iframe>
, classique ,<script>
etc. (initiée via HTML ou JS) sanscrossorigin
explicitement spécifié , le MUST preconnect ne pas avoircrossorigin
ensemble d'attributs.crossorigin=anonymous
fetch
ouXHR
:credentials !== omit
; en cas de XHR:): la préconnexionwithCredentials === true
doit avoircrossorigin=use-credentials
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:
la source