Qu'est-ce que CORS ? La règle du navigateur derrière chaque erreur cross-origin
Requêtes simples, preflights et identifiants, avec des tests curl.
Lire le guideAide CDN.com.tr
Ajoutez Access-Control-Allow-Origin et les autres en-têtes CORS aux réponses d'une règle de diffusion, laissez votre origine répondre aux requêtes OPTIONS de preflight, et autorisez dans le WAF les méthodes qu'utilise votre API.
Cache, sécurité, WAF et purge
Ajoutez Access-Control-Allow-Origin et les autres en-têtes CORS aux réponses d'une règle de diffusion, laissez votre origine répondre aux requêtes OPTIONS de preflight, et autorisez dans le WAF les méthodes qu'utilise votre API.
https://app.example.com, ou * pour des fichiers que tout le monde peut charger.OPTIONS sur ces chemins par 200 ou 204.Ce qu'envoie le navigateur détermine où le travail se fait.
GET : pas de preflight, et Access-Control-Allow-Origin dans la règle suffit. Tant que l'optimisation des images de tout le compte est activée, les fichiers .jpg, .jpeg et .png prennent les en-têtes de réponse de la règle la plus ancienne du domaine, pas ceux de la règle de leur chemin.PUT, PATCH, DELETE : le navigateur envoie d'abord un preflight ; votre origine y répond, et la règle peut ajouter les en-têtes CORS à cette réponse.*, plus Access-Control-Allow-Credentials true.Choisissez une seule source par en-tête.
always.Vary: Origin.Exemple pour une API sous /api/ qu'appelle une application web. Écrivez un en-tête par ligne ; une valeur contenant des espaces se met entre guillemets doubles.
/api/.Access-Control-Allow-Origin https://app.example.com, Access-Control-Allow-Methods "GET, POST, PUT, OPTIONS", Access-Control-Allow-Headers "Content-Type, Authorization" et Access-Control-Max-Age 600.Resultat attendu: La règle affiche une pastille comme +4 en-têtes de réponse, et la page affiche En ligne une fois que l'edge la sert.
Nécessaire tant que le WAF de tout le site est activé et que l'API utilise d'autres méthodes que GET, HEAD, POST et OPTIONS.
PUT, PATCH ou DELETE selon les besoins de votre API, laissez OPTIONS coché et cliquez sur Save.Resultat attendu: Le panneau confirme l'enregistrement, et la modification se propage en 1-2 minutes.
curl n'applique pas CORS : il montre donc exactement ce que répond l'edge.
Origin.OPTIONS avec Origin, Access-Control-Request-Method et Access-Control-Request-Headers.Resultat attendu: La requête simple porte un seul access-control-allow-origin. Le preflight répond 200 ou 204 avec l'origine, les méthodes et les en-têtes autorisés.
curl -s -o /dev/null -D - -H 'Origin: https://app.example.com' https://www.example.com/api/items | grep -iE '^(HTTP|access-control)'
curl -s -o /dev/null -D - -X OPTIONS -H 'Origin: https://app.example.com' -H 'Access-Control-Request-Method: PUT' -H 'Access-Control-Request-Headers: content-type' https://www.example.com/api/items | grep -iE '^(HTTP|access-control|x-mt-blocked-by)'
Une application web sur app.example.com charge des polices, du JSON ou des réponses d'API depuis www.example.com, et le navigateur les bloque avec une erreur CORS.
Nom-En-tête valeur, sans deux-points, par exemple Access-Control-Allow-Origin https://app.example.com. Une valeur contenant des espaces se met entre guillemets doubles.Access-Control-* pour ces chemins, cochez le même nom sous Supprimer des en-têtes, afin que le navigateur reçoive une seule valeur.PUT, PATCH ou DELETE et que le WAF de tout le site est activé, cochez-les sous Méthodes HTTP autorisées sur la page Security.always est aussi ajoutée aux réponses 4xx et 5xx de votre origine.OPTIONS de preflight vont à votre origine et ne sont jamais mises en cache. Lorsque votre origine répond à un preflight par 200 ou 204, les en-têtes de la règle sont ajoutés à cette réponse ; un preflight qui reçoit 401, 404 ou 405 arrive au navigateur sans eux, sauf si la ligne se termine par always. Sur une règle avec Protection par mot de passe ou une Liste d'IP autorisées, l'edge répond lui-même par 401 ou 403 à un preflight qu'il ne laisse pas passer.Access-Control-Allow-Origin arrive au navigateur : avec deux valeurs, le navigateur rejette la réponse.Access-Control-Allow-Origin selon le site demandeur, elle doit aussi envoyer Vary: Origin. L'edge garde ces variantes séparées tant que Garder une seule copie en cache quel que soit l'en-tête Vary est désactivé sur la règle.Access-Control-Request-Method et Access-Control-Request-Headers décochés sous Supprimer des en-têtes : les noms cochés à cet endroit sont aussi retirés des requêtes envoyées à votre origine, et votre origine lit ces deux en-têtes pour répondre à un preflight.GET, HEAD, POST et OPTIONS sont autorisés par défaut. Une requête dont la méthode ne figure pas dans la liste reçoit un 403 sans en-têtes CORS et avec X-MT-Blocked-By: cdn-edge-security, que le navigateur signale comme une erreur CORS..jpg, .jpeg et .png reçoivent les en-têtes de réponse de la règle la plus ancienne du domaine, pas ceux de la règle de leur chemin : placez l'en-tête CORS de ces images sur cette règle, avec un Access-Control-Allow-Origin fixe. Lorsque cette règle la plus ancienne est la règle de vérification de certificat, ils ne reçoivent aucun en-tête de règle.L'edge transmet les requêtes OPTIONS à votre origine et ne les met jamais en cache : votre origine doit donc répondre au preflight par 200 ou 204. Les en-têtes de réponse de la règle sont ajoutés à cette réponse : les en-têtes CORS peuvent venir de la règle, et votre origine n'a qu'à accepter OPTIONS. Exception : sur une règle avec Protection par mot de passe ou une Liste d'IP autorisées, l'edge répond lui-même par 401 ou 403 à un preflight qu'il ne laisse pas passer.
Une règle ajoute la même valeur à chaque réponse : * ou une origine comme https://app.example.com. Pour autoriser plusieurs origines, laissez votre application envoyer l'origine correspondante avec Vary: Origin, et ne mettez pas Access-Control-Allow-Origin dans la règle. Les requêtes avec des cookies ou d'autres identifiants ont besoin d'une origine nommée, pas de *.
Commencez par le statut de la requête en échec dans le panneau réseau du navigateur. Un 403 avec X-MT-Blocked-By: cdn-edge-security vient de l'edge : recherchez-le dans les journaux WAF, et si sa méthode manque, ajoutez-la sous Méthodes HTTP autorisées. Par défaut, tout autre 4xx ou 5xx arrive sans les en-têtes de la règle : corrigez d'abord cette réponse. Une ligne qui se termine par always, comme Access-Control-Allow-Origin https://app.example.com always, est aussi ajoutée aux réponses 4xx et 5xx de votre origine. Vérifiez ensuite qu'un seul Access-Control-Allow-Origin arrive et qu'il correspond au site demandeur, schéma compris.
Tant que le WAF de tout le site est activé, ouvrez la page Security, cochez les méthodes sous Méthodes HTTP autorisées et cliquez sur Save ; la modification se propage en 1-2 minutes. Méthodes de requête autorisées, dans l'onglet Sécurité des Règles de diffusion, ouvre la même carte. Laissez OPTIONS coché : les navigateurs l'envoient pour les preflights.