Ich möchte meiner Website einige Hinweise zum Vorverbinden von Ressourcen hinzufügen, damit Browser (zum Beispiel) eine Verbindung zum jQuery-CDN herstellen können, bevor sie tatsächlich das Skript-Tag sehen, das das CDN aufruft. Ich bin mir nicht sicher, ob ich das Attribut "crossorigin" einfügen soll oder welchen Wert es haben soll. Die Spezifikation sagt teilweise,
Um eine Vorverbindung zu initiieren, muss der Benutzeragent die folgenden Schritte ausführen:
[…]
- Sei corsAttributeState der aktuelle Status des
crossorigin
Inhaltsattributs des Elements .- Lassen Sie Anmeldeinformationen in einem Booleschen Wert gesetzt werden
true
.- Wenn corsAttributeState ist
Anonymous
und der Ursprung nicht dem Ursprung des aktuellen Dokuments entspricht, setzen Sie die Anmeldeinformationen auffalse
.- Versuchen Sie, eine Verbindung mit Herkunft und Anmeldeinformationen herzustellen .
Ich weiß nicht, wie ich diesen Algorithmus interpretieren soll. Welchen Wert sollte ich für das Attribut "crossorigin" verwenden, wenn ich eine Verbindung zu einem CDN herstelle, mit dem jeder seinen Inhalt ohne Anmeldeinformationen herunterladen kann?
html
performance
cross-origin
bdesham
quelle
quelle
Antworten:
Ich war für die gleiche Sache suchen und ich fand diese
Hier heißt es, dass der Benutzeragent, wenn Sie kein Cross-Origin-Attribut verwenden, nur die DNS-Suche durchführt, aber keine Verbindung mit der bestimmten Domäne herstellt. Das Crossorigin-Attribut wird also benötigt, wenn Sie eine Vorverbindung zum Cross-Domain herstellen müssen, wie folgt:
Wenn Sie einige Anmeldeinformationen an diese bestimmte domänenübergreifende Datei senden möchten, können Sie den Wert auf crossorigin setzen, da
crossorigin = use-credentials
der Standardwert ansonsten anonym ist.quelle
crossorigin
ebenfalls eine Verbindung verschwendet, da eine neue Verbindung geöffnet werden muss verwendet kein CORS.Bisher verstehe ich die Verwendung von
crossorigin
, insbesondere in Bezug auf seine Werteanonymous
unduse-credentials
, die Sie verwenden sollten,crossorigin="use-credentials"
falls:Zusätzlich zu der von Ihnen zitierten Dokumentation habe ich dies und das . In der Tat ist die Dokumentation irreführend und enthält Rechtschreibfehler: der erste nennt sie
use-credentials
, der zweite -user-credentials
.Sowieso nach meinem Verständnis:
crossorigin
überhaupt gleichcrossorigin="anonymous"
crossorigin
gleichcrossorigin="use-credentials"
Vielleicht würde mich jemand korrigieren.
PS : Die aktuelle Version der Mozilla-Seite zum Thema bedeutet:
Mittel: Nein
crossorigin
überhaupt,crossorigin
odercrossorigin="use_credentials"
sind alle behandelt wiecrossorigin="anonymous"
.quelle
crossorigin
gleichcrossorigin="anonymous"
.Es hängt von zwei Dingen ab:
Für jQuery würden
crossorigin
Sie nicht verwenden . Skripte gehören nicht zu den Arten von Ressourcen, die Browser zum Herunterladen mit CORS verwenden .Schriftarten verwenden dagegen CORS.
crossorigin
Attribut an.crossorigin
. WennHier ist der Stapelüberlauf-Beitrag, in dem ich auf dasselbe Problem gestoßen bin.
Ich habe nicht untersucht, wann CORS-Anmeldeinformationen erforderlich sind. Ich habe kein Beispiel gesehen, in dem sie benötigt werden, daher sind Sie
crossorigin
wahrscheinlich in Sicherheit (dh "crossorigin =" anonym ").quelle
Alle bisherigen Antworten scheinen entweder teilweise falsch oder unvollständig zu sein (das Thema ist komplex, die Dinge sind verwirrend benannt und nicht gut dokumentiert!). Hier ist mein Verständnis:
Um die von hergestellte Verbindung wiederverwenden zu können
<link rel=preconnect>
, hängt es davon ab, welche Art von Inhalten Sie von wo abrufen möchten, ob die Anforderung Browser-Anmeldeinformationen sendet (die vom Browser explizit oder implizit festgelegt werden können):Die Anfrage hat denselben Ursprung (
example.com
fordert Subressource von anexample.com
)Es besteht überhaupt keine Notwendigkeit dafür
preconnect
; Der Browser hält die Verbindung offen, nachdem die Seite eine Weile geladen wurde.Zu überprüfen : Was ist, wenn eine Anfrage mit demselben Ursprung ein
crossorigin
Attribut hat: Wird sie verwendet oder ignoriert?Die Anfrage ist Cross-Origin (
example.com
Anfragen Subressource vonanother.com
)crossorigin
Attribut explizit festgelegt wurde (crossOrigin
in JS - Fall ist wichtig), muss der Preconnect es ebenfalls mit demselben Wert haben (möglicherweise außer in Fällen, in denen es keinen Sinncrossorigin
ergibt und ignoriert wird). - noch nicht ganz klar für mich)<script type=module>
: geprüft werden<img>
,<style type=stylesheet>
,<iframe>
, klassisch<script>
usw. (initiiert via HTML oder JS) ohnecrossorigin
explizit angegeben , so ist die preconnect darf keincrossorigin
Attribut gesetzt.crossorigin=anonymous
fetch
oderXHR
:credentials !== omit
; im Fall von XHRwithCredentials === true
:): Vorverbindung muss vorhanden seincrossorigin=use-credentials
crossorigin=anonymous
Für den letzten Fall (Abrufen / XHR) gehen Sie in Chrome / Firefox devtools zum Netzwerkfenster, klicken Sie mit der rechten Maustaste auf eine Anfrage und wählen Sie
copy as fetch
aus einer Dropdown-Liste. Dadurch wird ein JS-Snippet erstellt, das angibt, ob diese Anforderung CORS-fähig ("mode"=="cors"
) und mit Anmeldeinformationen ("credentials"=="include"|"same-origin"
) ist.Hinweis aber der Trick oben funktioniert nicht richtig für Nicht-XHR / Abrufanforderungen, weil zum Beispiel
fetch
und<img>
verschiedene Algorithmen verwenden Verbindung herzustellen, wie zuvor erläutert.Schließlich in HTML
<link ...crossorigin>
===<link ...crossorigin=anonymous>
.Zusätzliche Hinweise und Links:
quelle