Erreurs CORS
Cet article fournit une brève description des erreurs CORS (Cross-Reference Origin Sharing) qui peuvent apparaître sur vos demandes via des applications.
Qu'est-ce que CORS ?
CORS est une norme qui permet des interactions avec des ressources d'origine différente. Basé sur la même politique d'origine (mécanisme de sécurité) pour empêcher qu'un document ou un script chargé à partir d'une origine puisse interagir avec des ressources d'une autre origine. Si le CORS n'est pas configuré, vous pouvez voir l'erreur sur le navigateur de la console indiquant que la demande a été bloqué :"Cross-Origin Request Blocked :la même politique d'origine interdit la lecture de la ressource distante sur $somesite ”.
Quand puis-je savoir si les demandes proviennent de la même origine ? C'est simple si les deux URL ont le même protocole, hôte et port. Ceci est un exemple de conformité avec la same-origin-policy https://localhost:80/index.html demande des données à https://localhost:80/api/user/75214Ceci est un exemple de non-conformité avec la same-origin-policy https://localhost:80/index.html demande des données à https://example.com:80/api/user/75214
Quel type d'erreur peut apparaître ?
Lorsqu'une erreur CORS s'affiche sur la console, une partie du texte est une raison message indiquant ce qui ne va pas. La liste suivante décrit les erreurs CORS les plus courantes :
-
CORS DÉSACTIVÉ
Raison :une demande a été tentée, mais CORS est désactivé sur votre navigateur.Solution :vous devez accéder au navigateur du paramètre et définir l'option content.cors.disable false. -
La requête CORS n'a pas abouti
Raison :une requête HTTP échoue au niveau du réseau ou du protocole. Dans certains cas, cela est dû à un plugin ou à une extension ou parce que la deuxième origine a un certificat invalide.Solution :réessayez la demande et désactivez les plugins et les extensions. Vérifiez si la deuxième origine est disponible et possède un certificat valide. -
L'en-tête CORS "Origine" ne peut pas être ajouté
Raison :Le navigateur Web ne peut pas ajouter l'en-tête d'origine requis à la requête HTTP.Solution :Vérifiez si le script ne s'exécute pas avec des privilèges améliorés. -
Demande CORS de redirection externe non autorisée
Raison :La requête redirige vers une autre origine (pas l'original).Solution :Mettez à jour l'URL sur le code de votre serveur. -
Requête CORS non HTTP
Raison :la requête n'est pas redirigée vers une URL HTTP valide, par exemple, file:/// URL.Solution :vérifiez l'URL dans le code de votre serveur. -
En-tête CORS ‘Access-Control-Allow-Origin’ manquant
Raison :La réponse ne contient pas le Acces-Control-Allow-Origin header.Solution :Ajoutez l'origine à l'en-tête de la requête. Accès-Contrôle-Autoriser-Origine :https://rackspace.com ou vous pouvez utiliser * pour autoriser l'accès depuis n'importe quel site. -
L'en-tête CORS "Access-Control-Allow-Origin" ne correspond pas à "xyz"
Raison :La réponse inclut plusieurs éléments Access-Control-Allow-Origin .Solution :Assurez-vous que la requête CORS est configurée pour inclure votre origine dans son Access-Control-Allow-Origin header et n'a qu'un Access-Control-Allow-Origin en-tête. -
Les informations d'identification ne sont pas prises en charge si l'en-tête CORS 'Access-Control-Allow-Origin' est '*'
Raison :la demande CORS a été tentée avec l'indicateur d'informations d'identification défini, mais le serveur est configuré à l'aide du caractère générique ("*") comme valeur de Access-Control-Allow-Origin, qui n'autorise pas l'utilisation d'informations d'identification.Solution :Assurez-vous que la valeur de l'indicateur d'informations d'identification est fausse lors de l'émission de votre requête CORS. .credentials est "omettre". -
Méthode introuvable dans l'en-tête CORS "Access-Control-Allow-Methods"
Raison :La méthode de la requête HTTP n'est pas incluse dans la liste des Access-Control-Allow-Methods entête.
Solution :Configurez l'en-tête avec les méthodes nécessaires :Access-Control-Allow-Methods :GET,HEAD,POST -
Attendu "true" dans l'en-tête CORS "Access-Control-Allow-Credentials"
Raison :Lorsque les Access-Control-Allow-Credentials du serveur la valeur de l'en-tête n'est pas définie sur true pour permettre leur utilisation. Solution :côté client, révisez la configuration suivante :XMLHttpRequest définissant la valeur de withCredentials sur false. Les événements envoyés par le serveur s'assurent que EventSource.withCredentials est false (c'est la valeur par défaut). Si vous utilisez l'API Fetch, assurez-vous que Request.credentials est "omit". Pour éliminer cette erreur côté serveur, définissez Access-Control-Allow-Credentials valeur à true. -
Le canal de contrôle en amont CORS n'a pas réussi
Raison :la demande CORS l'exige et le contrôle en amont et le contrôle en amont n'ont pas pu être effectués. Une requête intersite a déjà effectué un contrôle en amont. La demande de contrôle en amont a subi une erreur de mise en réseau.Solution :vérifiez que votre code n'effectue le contrôle en amont qu'une seule fois par connexion. -
Jeton invalide 'xyz' dans l'en-tête CORS 'Access-Control-Allow-Methods'
Raison :cela se produit lorsque la réponse au CORS inclut Access-Control-Allow-Methods et au moins une est une méthode d'en-tête non valide.Solution :Vérifiez que toutes les méthodes dans Access-Control-Allow-Methods sont des méthodes HTTP valides. -
jeton invalide 'xyz' dans l'en-tête CORS 'Access-Control-Allow-Headers'
Raison :Cela se produit lorsque la réponse au CORS inclut Access-Control-Allow-Methods et au moins un est un nom d'en-tête non valide.Solution :vérifiez que tous les noms d'en-tête dans Access-Control-Allow-Headers ne sont pas invalides ou inconnues. -
Jeton manquant 'xyz' dans l'en-tête CORS 'Access-Control-Allow-Headers ' du canal de contrôle en amont CORS
Raison :cette erreur se produit lors de la tentative de contrôle en amont d'un en-tête qui n'est pas inclus dans la liste spécifiée par Access-Control-Allow-Headers header.Solution :Le serveur doit être mis à jour afin qu'il autorise l'en-tête indiqué ou l'évite. -
L'en-tête CORS multiple "Access-Control-Allow-Origin" n'est pas autorisé
Raison :Plusieurs Access-Control-Allow-Origin l'en-tête a été envoyé par le serveur.Solution :Vérifiez dans votre serveur que vous ne pouvez pas envoyer une liste d'origines car les navigateurs n'acceptent qu'une seule origine ou null.
Conclusions
Cet article présente les différents types d'erreurs et les solutions possibles que vous pouvez obtenir lors de l'utilisation de CORS sur votre serveur Web.