Warum wird ein Script mit dem Skript crossorigin = 'anonymous' "durch die CORS-Richtlinie blockiert"?

9

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?

    
pdg137 09.12.2016, 21:40
quelle

2 Antworten

9

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.

    
pdg137 09.12.2016 21:47
quelle
1
Das Attribut

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:

%Vor%

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

>     
Robo Robok 22.01.2017 17:46
quelle

Tags und Links