Chyby CORS
Tento článek poskytuje krátký popis související s chybami Cross-Reference Origin Sharing (CORS), které se mohou objevit u vašich požadavků prostřednictvím aplikací.
Co je CORS?
CORS je standard, který umožňuje interakce se zdroji z jiného původu. Založeno na zásadě stejného původu (bezpečnostní mechanismus), aby se zabránilo tomu, jak dokument nebo skript načtený z jednoho zdroje může interagovat se zdroji z jiného zdroje. Pokud CORS není nakonfigurován, můžete v prohlížeči konzole vidět chybu indikující, že požadavek byl zablokován:„Cross-Origin Request blokován:Stejné zásady původu zakazují čtení vzdáleného zdroje na $somesite “.
Kdy se dozvím, zda žádosti pocházejí ze stejného zdroje? Je to jednoduché, pokud mají dvě adresy URL stejný protokol, hostitele a port. Toto je příklad souladu se zásadami stejného původu https://localhost:80/index.html požadovat data na https://localhost:80/api/user/75214Toto je příklad nedodržení zásady stejného původu https://localhost:80/index.html požádat o data na https://example.com:80/api/user/75214
Jaké druhy chyb se mohou objevit?
Když se na konzole zobrazí chyba CORS, část textu je důvod zpráva oznamující, co se pokazilo. Následující seznam popisuje nejběžnější chyby CORS:
-
CORS VYPNUTO
Důvod:Proběhl pokus o požadavek, ale ve vašem prohlížeči je zakázána funkce CORS. Řešení:Musíte přejít do prohlížeče nastavení a nastavit možnost content.cors.disable na hodnotu false. -
Požadavek CORS nebyl úspěšný
Důvod:Požadavek HTTP selže na úrovni sítě nebo protokolu. V některých případech je to způsobeno zásuvným modulem nebo rozšířením nebo tím, že druhý zdroj má neplatný certifikát. Řešení:Zkuste požadavek znovu a vypněte pluginy a rozšíření. Zkontrolujte, zda je k dispozici druhý původ a zda má platný certifikát. -
Záhlaví CORS ‚Origin‘ nelze přidat
Důvod:Webový prohlížeč nemůže k požadavku HTTP přidat požadovanou hlavičku původu. Řešení:Ověřte, zda skript neběží s rozšířenými oprávněními. -
Externí přesměrování požadavku CORS není povoleno
Důvod:Požadavek přesměrovává na jiný zdroj (ne původní). Řešení:Aktualizujte adresu URL v kódu vašeho serveru. -
Požadavek CORS není HTTP
Důvod:Požadavek není přesměrován na platnou HTTP URL, například file:/// URL. Řešení:Zkontrolujte URL v kódu vašeho serveru. -
Chybí záhlaví CORS ‘Access-Control-Allow-Origin’
Důvod:V odpovědi chybí Acces-Control-Allow-Origin header.Solution:Přidejte původ do hlavičky požadavku. Access-Control-Allow-Origin:https://rackspace.com nebo můžete použít * povolit přístup z libovolného webu. -
Záhlaví CORS ‘Access-Control-Allow-Origin’ neodpovídá ‘xyz’
Důvod:Odpověď obsahuje více než jeden Access-Control-Allow-Origin .Řešení:Ujistěte se, že požadavek CORS je nakonfigurován tak, aby zahrnoval váš původ v jeho Access-Control-Allow-Origin záhlaví a má pouze Access-Control-Allow-Origin záhlaví. -
Přihlašovací údaje nejsou podporovány, pokud je záhlaví CORS 'Access-Control-Allow-Origin' je '*'
Důvod:Proběhl pokus o požadavek CORS s nastaveným příznakem pověření, ale server je nakonfigurován pomocí zástupného znaku ("*") jako hodnoty Access-Control-Allow-Origin, což neumožňuje použití pověření. Řešení:Při zadávání požadavku CORS se ujistěte, že hodnota příznaku pověření je false.XMLHttpRequest nastavením hodnoty withCredentials na false.Události odeslané serverem se ujistěte, že EventSource.withCredentials je false (je to výchozí hodnota). Pokud používáte rozhraní Fetch API, ujistěte se, že Request .pověření je „vynecháno“. -
Nenalezena metoda v záhlaví CORS ‘Access-Control-Allow-Methods’
Důvod:Metoda požadavku HTTP není zahrnuta v seznamu Access-Control-Allow-Methods záhlaví.
Řešení:Nakonfigurujte hlavičku pomocí potřebných metod:Access-Control-Allow-Methods:GET,HEAD,POST -
Očekávaná hodnota „true“ v záhlaví CORS „Access-Control-Allow-Credentials“
Důvod:Když Access-Control-Allow-Credentials serveru hodnota záhlaví není nastavena na true, aby bylo možné jejich použití.Řešení:Na straně klienta upravte následující konfiguraci:XMLHttpRequest nastavení hodnoty withCredentials na false.Události odeslané serverem se ujistěte, že EventSource.withCredentials je false (je to výchozí hodnota). Pokud používáte rozhraní Fetch API, ujistěte se, že Request.credentials je „vynecháno“. Chcete-li odstranit tuto chybu na straně serveru, nastavte Access-Control-Allow-Credentials hodnotu to true. -
Kanál kontroly před výstupem CORS nebyl úspěšný
Důvod:Požadavek CORS vyžaduje a nebylo možné provést předletovou a předletovou kontrolu. Požadavek mezi weby již provedl předběžnou kontrolu. Požadavek kontroly před výstupem zaznamenal jakoukoli chybu sítě.Řešení:Ověřte, že váš kód provádí kontrolu před výstupem pouze jednou za připojení. -
Neplatný token „xyz“ v záhlaví CORS ‘Access-Control-Allow-Methods’
Důvod:K tomu dochází, když odpověď na CORS zahrnuje Access-Control-Allow-Methods a alespoň jedna je neplatná metoda záhlaví.Řešení:Ověřte, že všechny metody v Access-Control-Allow-Methods jsou platné metody HTTP. -
neplatný token „xyz“ v záhlaví CORS „Access-Control-Allow-Headers“
Důvod:K tomu dochází, když odpověď na CORS zahrnuje Access-Control-Allow-Methods a alespoň jeden je neplatný název záhlaví.Řešení:Ověřte, že všechny názvy záhlaví v Access-Control-Allow-Headers nejsou neplatné ani neznámé. -
Chybí token „xyz“ v záhlaví CORS „Access-Control-Allow-Headers ' z předletového kanálu CORS
Důvod:K této chybě dochází při pokusu o předběžnou kontrolu záhlaví, které není zahrnuto v seznamu určeném Access-Control-Allow-Headers header.Solution:Server musí být aktualizován tak, aby umožňoval uvedenou hlavičku nebo se jí vyhýbal. -
Vícenásobné záhlaví CORS ‘Access-Control-Allow-Origin’ není povoleno
Důvod:Více než jeden Access-Control-Allow-Origin hlavička byla odeslána serverem. Řešení:Ověřte na svém serveru, že nemůžete odeslat seznam zdrojů, protože prohlížeče přijímají pouze jeden zdroj nebo hodnotu null.
Závěry
Tento článek ukazuje různé typy chyb a možná řešení, která můžete získat při používání CORS na vašem webovém serveru.