3 votes

Erreur de Access-Control-Allow-Origin

J'utilise le script suivant -

<!DOCTYPE html>
<html>
<head>
<script src="jquery-1.9.1.min.js"></script>
<script>
function postForm() {

    $.ajax({
            type: 'POST',
            url: 'http://10.0.0.8:9000/demo',
            data: {"name" : "test"},
            contentType: "application/json; charset=utf-8",
            dataType: 'json',
        })
    }

</script>
</head>
<body>
    <form id="ajaxForm" onsubmit="postForm(); return false; "  method="post"> 
        <input id="test" type="text" name="name" value="Hello JSON" /> 
        <input type="submit" value="Submit JSON" /> 
    </form>

</body>
</html>

L'ordinateur auquel j'essaie d'accéder utilise le Play Framework. Je reçois l'erreur suivante :

OPTIONS http://10.0.0.8:9000/demo 404 (Non trouvé) jquery-1.9.1.min.js:5 XMLHttpRequest ne peut pas être chargé http://10.0.0.8:9000/demo . Origine http://localhost:8080 n'est pas autorisé par Access-Control-Allow-Origin.

Cela fait deux jours que je suis dans l'impasse, quelqu'un peut-il m'aider ?

Merci d'avance

19voto

T.J. Crowder Points 285826

Le problème est que vous essayez de faire un appel inter-origine (de http://localhost:8080 à http://localhost:9000 ). Ce n'est pas autorisé par la Politique de l'origine identique donc le navigateur essaie d'utiliser Partage de ressources inter-origine pour demander au serveur s'il est d'accord pour autoriser l'appel inter-origine. (C'est le OPTIONS la requête HTTP que vous voyez). Puisque le serveur ne répond pas à la requête OPTIONS avec des en-têtes permettant l'appel, celui-ci est refusé par le navigateur pour des raisons de sécurité.

La procédure normalisée s'applique à tous les appels "ajax" (par exemple, ceux effectués par l'intermédiaire de XMLHttpRequest ). Vous pouvez soit :

  1. Mettre à jour le serveur pour implémenter la réponse au OPTIONS en renvoyant les en-têtes pour permettre l'appel (ce qui le fera fonctionner sur la plupart des navigateurs modernes ), ou

  2. Faire la demande au même port (je suppose qu'il y a une raison pour laquelle vous ne le faites pas), ainsi la demande est à la même origine et le SOP ne s'applique pas, ou

  3. Passez à l'utilisation de JSON-P . Mais JSON-P est inapproprié pour les soumissions de formulaires parce que c'est une GET et GET les opérations sont censées être idempotent ce qui n'est pas le cas de la plupart des soumissions de formulaires. Ainsi, à moins qu'il ne s'agisse d'un formulaire de soumission idempotent (par exemple, une recherche), l'utilisation de JSON-P serait, au mieux, une pirouette.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X