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

AngularJS Discussion :

AngularJS entête CORS


Sujet :

AngularJS

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2015
    Messages : 15
    Points : 10
    Points
    10
    Par défaut AngularJS entête CORS
    Bonjour,

    Je travaille actuellement au développement d'une application avec ionic/AngularJS. Je souhaite interroger un web service. Pour celà j'utilise $http avec le controller ci dessous:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
      .controller('testRestctrl', function($http,$scope,$q,ClientRESTService) {
        $scope.reponseService;
        $scope.actiononclik=function(){
          var testpromise=function(){
            console.log("dans actiononclik");
            var prov;
            var deferred= $q.defer();
     
            $http({
              method: 'GET',
              url: "https://ip-du-serveur/api/entity/get",
              crossDomain: true
            }).success(function(data,status){
              prov=data;
              deferred.resolve(prov);
     
            }).error(function(data,status){
              console.log("erreur de statut"+status+"et"+data)
              deferred.reject('données non recupérée');
            });
            return deferred.promise;
          };
          $scope.reponseService=testpromise().then(function(prov){
            $scope.reponseService=prov;
     
          }, function(){
           console.log("errreur dans le retour des promises")
          }
          );
        }
      });
    j'ai une erreur :
    Blocage d'une requête multi-origines (Cross-Origin Request) : la politique « Same Origin » ne permet pas de consulter la ressource distante située sur https://ip-du-serveur/api/entity/get. Raison : l'en-tête CORS « Access-Control-Allow-Origin » est manquant.
    pour essayer de la résoudre j'ai inclus le code ci dessous au début de mon module:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      .config(function ($httpProvider) {
        delete $httpProvider.defaults.headers.common['X-Requested-With'];
      })
    ça n'a rien changé j'ai donc remplacer le $http du contrôleur par celui ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
             $http({
             method: 'JSONP',
             url: url
             crossDomain: true
          })
    avec une var url qui contient l'url https://ip-du-serveur/api/entity/get la aussi aucun changement

    j'ai essayer de le remplacer par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $http.get('https://ip-du-serveur/api/entity/get')
    ça n'a pas fonctionné non plus j'ai donc essayé avec l'adresse d'un web service de test : http://rest-service.guides.spring.io/greeting
    ça a fonctionné.

    dans le meme temps si j'utilise l'url 'https://ip-du-serveur/api/entity/get (celle du web service qui m'interesse) sur un navigateur celui ci me demande de lever une exeption de sécurité car le certificat est auto signé mais une fois celà fait j'obtient bien un résultat.

    Pouvez vous m'aider car malgrès mes recherches je ne trouve pas de solution coté client et je ne peux pas modifier le serveur hébergeant le webservice ni le web service lui même de plus je suis obligé de l'interroger en https . Merci d'avance.
    Ps je débute en AngularJS

  2. #2
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    Citation Envoyé par Cludo Voir le message
    Pouvez vous m'aider car malgrès mes recherches je ne trouve pas de solution coté client et je ne peux pas modifier le serveur hébergeant le webservice ni le web service lui même de plus je suis obligé de l'interroger en https . Merci d'avance.
    Ps je débute en AngularJS
    Comme la config de CORS se gère côté serveur tu vas avoir du mal ...

    Il n'y a rien à faire côté front sur ce sujet, tu subis la config du serveur.
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2015
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Merci pour votre aide je vais donc devoir "bricoler" cote serveur.

    Cordialement.

  4. #4
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    Pour être plus clair, lorsque des serveurs exposent des endpoints webservices à destination d'applications web, il est absolument obligatoire techniquement que ces serveurs implémentent CORS.

    Il ne s'agit donc pas de bricoler mais de faire les devs permettant aux serveurs de supporter CORS qui est implémenté dans tous les browsers modernes.
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

  5. #5
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    comment est ta conf serveur ?
    as-tu un serveur apache pour le web et un serveur pour les services ?

    perso j'ai placé un apache en frontal
    dans la conf apache j'ai crée un virtual host pour mon appli
    dans la définition de ce virtual host j'ai utilisé
    mod_ajp pour l'accès à mes service java
    mod_proxy pour l'accès au fichier statiques js/css/html

    du coup vu du client tout vient de mon virtual host il n'y a plus de CORS
    A+JYT

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