IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AJAX Discussion :

Requête ajax: Cross-Origin Request


Sujet :

AJAX

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 342
    Points : 123
    Points
    123
    Par défaut Requête ajax: Cross-Origin Request
    Bonjour,

    j'ai fais sur mon site une api en php qui est appelé par des clients en javascript.

    Je test pas mal mais api en local, mais j'ai récemment fais un script JS pour tester mes api en prod directement sur mon site.
    Dont voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    TestU._testRequest = function(url) {
       var result;
       var req = new XMLHttpRequest();
       req.open('GET', url,false);
       req.addEventListener('load', function () {result = req.responseText;});
       req.send();
      return result; 
    }
    TestU._testRequest("https://www.monsite.com/api.php?value=test"); // j'ai changé l host de l'url, monsite ne sappellant pas vraiment monsite  :)
    Le problème est que mon script ne fonctionne pas quand je le fais pointé de api de prod.
    Dans le navigateur j'ai une erreur:
    Blocage d’une requête multiorigines (Cross-Origin Request) : la politique « Same Origin » ne permet pas de consulter la ressource distante située sur https://www.monsite.com/api.php?value=test. Raison : l’en-tête CORS « Access-Control-Allow-Origin » est manquant.
    A noter que je teste en local, l'origin est donc 127.0.0.1.
    Mozilla a une page sympa en parlant, mais il ne detaille pas spécialement comment corriger. A priori, je dois faire coté serveur peut etre coté client, mais je ne sais pas quelle ligne mettre.
    Note: Mon api est public et ne nécéssite pas de crédentiale.

    Merci d'avance pour votre aide sur la résolution de mon probleme.

    Note: Ce que je trouve encore plus bizarre est que mon logiciel client qui possède le meme code n'a ce probleme (peut etre car il ,'est pas executé par un navigateur) C'est pas très grave tant que ca marche.

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    mets un header php sur ta page
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    header("Access-Control-Allow-Origin: *");
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 342
    Points : 123
    Points
    123
    Par défaut
    Super merci ca a marché.

    Tu sais si par hasard, c'est vraiment propre aux navigateurs web ?
    Car mon client est en faite une extension chrome pour etre précis, et il fonctionne sans la commande php.

    Donc si je peux m'en passer (en dehors de mon script de tests) j'aimerais bien m'en passer car je ne veux pas spécialement qu'un site tape dans mon api.
    A l'inverse, si au contraire je dois la mettre car mon extension chrome fonctionne par "miracle", je la garderais.

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    Ce n'est pas propre au navigateur, mais au serveur, c'est le serveur qui autorise ou non la requête cross domaine.
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 342
    Points : 123
    Points
    123
    Par défaut
    Raf j'aurais su jaurais pas fait mon test auto en javascript.

    Car je suis chez .byethost.com en plan gratuit et la ligne de code de résoud pas le probleme.
    Alors que le meme code fonctionne ailleurs.

    J'ai limpression que cet hebergeur bloque le CORS. c'est possible ?

  6. #6
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 099
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 099
    Points : 8 208
    Points
    8 208
    Billets dans le blog
    17
    Par défaut
    Car mon client est en faite une extension chrome pour etre précis, et il fonctionne sans la commande php.
    CORS doit être pris en charge par le client et le serveur pour être pleinement fonctionnel.
    De ce que je comprends, c'est le client qui refuse de récupérer la data si le serveur ne spécifie pas accepter les requêtes cross-origin (réponse "opaque" ou un truc dans le genre).
    Les requêtes cross-origin ont été désactivées sur Chrome il y a quelques temps.
    Seul moyen de pouvoir en faire sans que le serveur ne les accepte => Via un script en background d'extension
    => Des infos : https://www.chromium.org/Home/chromi...ontent-Scripts
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/06/2020, 10h47
  2. Réponses: 2
    Dernier message: 25/02/2020, 15h47
  3. Blocage d’une requête multiorigines (Cross-Origin Request)
    Par OZ1977 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 03/10/2019, 21h25
  4. Blocage d’une requête multiorigines (Cross-Origin Request)*
    Par erichissime dans le forum IGN API Géoportail
    Réponses: 6
    Dernier message: 19/02/2019, 10h49
  5. Ping Blocage d’une requête multi-origines (Cross-Origin Request)
    Par samtheh dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 13/02/2017, 14h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo