1
votes

Problème CORS lors de l'appel d'une API à l'aide de jQuery

J'essaie d'appeler une API qui renvoie des données XML en réponse.

Lorsque j'exécute ce fichier .htm sur ma machine locale, cela me donne l ' erreur suivante. Appel depuis un ordinateur local

Et, lors de son exécution à partir de la plate-forme codepen.io , cela me donne l ' erreur strong >. Appel depuis la plateforme codepen

Mais, lorsque j'appelle l'API depuis Postman ou JSON Formatter , ça marche donne la réponse. Lorsque je le colle simplement dans le navigateur et que j'appuie sur Entrée, cela fonctionne également. Mais ne fonctionne pas avec mon code. Je ne sais pas quel est le problème. Quelqu'un peut-il m'aider s'il vous plaît?

Voici mon code

<!doctype html>
<html lang="en">

<head>
    <meta charset="utf-8">
    <title>jQuery.parseXML demo</title>
    <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
</head>

<body>
    <p id="someElement">Hello</p>
    <p id="anotherElement"></p>

    <script>
        $(document).ready(function () {
            var api_url = 'http://lb.50g.nl/xml/29474bb065f2b30ca5eb3496f231bced.xml'

            $.ajax({
                url: api_url + $(this).text(),
                dataType: "xml",
                async: true,
                method: "GET",
                headers: {
                    "accept": "text/xml",
                    "Access-Control-Allow-Origin": "*"
                },
                crossDomain: true,
                success: function (result) {
                    console.log(result);
                }
            })
        });

    </script>
</body>

</html>


1 commentaires

vérifiez le type de données que vous insérez dans postMan et comparez celui-ci avec les données que vous insérez dans le navigateur, etc. comparez celles que vous trouverez la différence.


3 Réponses :


3
votes

Ce que vous voyez a quelque chose à voir avec ce que l'on appelle CORS.

En substance, vous n'êtes pas autorisé à demander des ressources à un autre serveur (domaine) que celui à partir duquel votre document est diffusé. Cela permet de réduire les risques d'attaques xSite.

L'API fonctionne très bien, c'est pourquoi le facteur vous récupère les données, c'est en fait le navigateur qui interdit à la requête d'être renvoyée de votre document.

Pour demander des ressources à un domaine différent de celui que vous servez, vous devez appliquer certaines règles de sécurité.

Vous pouvez consulter le répondez pour plus d'informations.


3 commentaires

Cela peut m'aider, mais je ne suis pas un développeur professionnel. Je cherche toujours ce que je dois faire exactement. :)


Essayez de suivre la réponse donnée par 'Miracool' sur le lien que j'ai posté, cela devrait vous permettre d'accéder à l'API normalement depuis votre page. Sinon, faites-moi savoir à nouveau


Oui, j'ai essayé ça. Obtenir les mêmes erreurs. J'essaye toujours de le comprendre. :)



1
votes

Je suis totalement d'accord avec MKougiouris . vous obtenez l'erreur en raison du Partage de ressources inter-origines (CORS) . ainsi votre back-end rejette tout appel API qui ne provient pas de la même origine, par exemple serveur . CORS vous aide à restreindre l'accès à certaines ressources à partir d'une origine spécifiée. cependant, si vous êtes celui qui gère le back-end, vous pouvez utiliser ce code pour donner accès à toutes les origines. header ("Access-Control-Allow-Headers", "*") . mais cela a fonctionné pour mon projet de nœud.

app.all('*', function(req, res, next) {
  var origin = req.get('origin'); 
  res.header('Access-Control-Allow-Origin', origin);
  res.header("Access-Control-Allow-Headers", "X-Requested-With");
  res.header('Access-Control-Allow-Headers', 'Content-Type');
  next();
})

Remarque: si vous travaillez sur un projet confidentiel, vous devez restreindre l'accès mais ce qui précède donne accès à tous.


0 commentaires

1
votes

API Gateway d'AWS vous aidera à résoudre ce problème toute la journée.

Lorsque vous exécutez une requête HTTP, il est conseillé d'appeler un module depuis le back-end (avec js / node), cela vous permettra de contourner le problème CORS. mais pourquoi configurer un serveur / back-end quand vous pouvez utiliser AWS pour cela.

Avec quelques étapes supplémentaires, vous pouvez créer une API qui transmet la demande, puis l'appeler à partir de votre navigateur où elle enverra à votre page une réponse autorisée pour plusieurs domaines.

voir ma réponse ici:

Comment récupérer des données volcaniques d'origine croisée en xml?


0 commentaires