Mit Google Chrome oder Firefox, wenn ich versuche, den folgenden HTML-Code zu laden:
%Vor%Ich erhalte einen CORS-Fehler wie folgt:
Zugriff auf das Skript unter Ссылка "vom Ursprung" Ссылка "wurde durch die CORS-Richtlinie blockiert: Kein 'Access-Control-Allow-Origin'-Header ist auf der angeforderten Ressource vorhanden ...
Das gleiche Tag ohne das crossorigin='anonymous'
-Attribut funktioniert jedoch gut (natürlich wird ein 404-Fehler erzeugt, da foo.js nicht existiert).
Dies ist überraschend, da anonymous
nur das Senden von Anmeldeinformationen verhindern soll und Skript-Tags sind sollte CORS nicht benötigen . Was verursacht das und was soll ich tun?
Ich war eine Zeitlang verwirrt. Hier ist, wie ich es jetzt verstehe:
Laut W3C gibt es tatsächlich drei mögliche Werte für das crossorigin
-Attribut: anonymous
, use-credentials
und ein "fehlender Standardwert", auf den nur zugegriffen werden kann, indem das Attribut weggelassen wird. (Ein leerer String dagegen wird auf anonymous
abgebildet.) Der Standardwert bewirkt, dass der Browser CORS vollständig überspringt, was das normale Verhalten ist, das ich erwartet habe.
Das crossorigin
-Attribut sollte nur dann verwendet werden, wenn es darum geht, Fehlerinformationen für das geladene Skript zu erhalten. Da der Zugriff auf diese Informationen eine CORS-Prüfung erfordert, muss der Header Access-Control-Allow-Origin
auf der Ressource vorhanden sein, damit sie geladen werden kann.
crossorigin
hat nur zwei mögliche Werte: anonymous
oder use-credentials
. Jeder Wert außer anonymous
, einschließlich leerem Wert, wird in anonymous
übersetzt.
Also haben diese drei Tags die gleiche Bedeutung:
%Vor% Interessant ist jedoch, dass das CORS-Verhalten vollständig deaktiviert ist, wenn Sie das Attribut crossorigin
überspringen. Zum Beispiel:
Dieses Tag führt ein Skript ohne CORS-bezogene Überprüfung aus. In der Praxis macht das crossorigin
-Attribut den Browser nicht dazu, Origin
HTTP header ganz zu überspringen.
Unabhängig davon, ob crossorigin
anonymous
oder use-credentials
ist, muss die Origin
der Anfrage immer noch mit der Access-Control-Allow-Origin
der Antwort übereinstimmen. Sonst kein Glück - Skript wird nie abgefeuert.
Quelle: HTTP-Zugriffskontrolle (CORS) im Mozilla Developer Network
>Tags und Links javascript html