web-dev-qa-db-fra.com

L'en-tête «Access-Control-Allow-Origin» contient plusieurs valeurs

j'essaie d'envoyer une demande get à l'api comme si c'était une URL de connexion

var url = "http://demo.software.travel/gptp/api/authorization?apiKey=****&alias=****&login=****&password=****"
$.get(url, function(data) {
    console.log(data);
});

je reçois ceci dans ma console cette erreur

XMLHttpRequest ne peut pas se charger http://demo.software.travel/gptp/api/authorization?apiKey= **** & alias = **** & login = **** & password = **** . L'en-tête "Access-Control-Allow-Origin" contient plusieurs valeurs " http://travellights.net , *", mais une seule est autorisée. L'origine ' http://travellights.net ' n'est donc pas autorisée à y accéder.

j'essaie de voir les questions ici pour le résoudre, mais je n'ai pas obtenu ce que je dois changer, c'est ennuyeux en fait.

L'en-tête 'Access-Control-Allow-Origin' contient plusieurs valeurs

ceci résolu par asp.net web.congif

Au fait, j'utilise CHROME BROWSER toute aide que j'apprécie.

[~ # ~] mise à jour [~ # ~] en-têtes de réponse:

Access-Control-Allow-Credentials:true
Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:Origin, x-requested-with, Content-Type, accept, Token
Access-Control-Allow-Methods:GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS
Access-Control-Allow-Origin:http://travellights.net
Access-Control-Allow-Origin:*
Connection:close
Content-Encoding:gzip
Content-Type:application/json;charset=utf-8
Date:Thu, 02 Jun 2016 16:41:18 GMT
Server:nginx/1.1.19
Set-Cookie:JSESSIONID=51FEE1A1206B9B481DD3EEA4167A9256; Path=/gptp
Vary:Origin
Vary:Accept-Encoding
X-UA-Compatible:IE=EmulateIE7

En-têtes de demande:

Accept:application/json, text/javascript, */*; q=0.01
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8,ar;q=0.6,en-GB;q=0.4
Connection:keep-alive
Host:demo.software.travel
Origin:http://travellights.net
Referer:http://travellights.net/b2b/Pages/login?
User-Agent:Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36
6
Alaa M. Jaddou

Vous essayez de faire le partage de ressources d'origine croisée (CORS) qui est un mécanisme qui permet de demander des ressources restreintes sur une page Web à partir d'un autre domaine en dehors du domaine d'où provient la ressource. (comme l'accès aux polices ou aux fichiers JSON).

Les navigateurs restreignent votre accès aux ressources d'autres origines en vertu de la politique de même origine comme mesure de sécurité pour les utilisateurs d'Internet.

Pour contourner ce problème, vous devez choisir les options suivantes:

  1. autoriser CORS sur le domaine http://demo.software.travel (mais il y a des problèmes de sécurité, plus de description à ce sujet ici: https://www.owasp.org/index .php/HTML5_Security_Cheat_Sheet # Cross_Origin_Resource_Sharing )

Activez CORS sur le serveur pour pouvoir accéder à d'autres domaines via. cela peut être fait en ajoutant les en-têtes suivants aux réponses:

Access-Control-Allow-Origin: http://travellights.net Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept

  1. si vous ne disposez pas du partage de ressources avec ce domaine, vous êtes autorisé à utiliser JSONP pour les opérations en lecture seule (JSONP est intrinsèquement en lecture seule)

JSONP encapsule un objet JSON dans un rappel, ce qui fait techniquement de la demande une ressource non restreinte (une balise de script) qui peut donc être partagée entre les domaines.

cela peut être fait via Vanilla js en ajoutant une balise de script sur la page.

function process(data) {
    // do stuff with JSON
}

var script = document.createElement('script');
script.src = '//domainURL?callback=process'

document.getElementsByTagName('head')[0].appendChild(script);

ou vous pouvez utiliser jquery pour obtenir le même résultat:

$.ajax({enter code here
    url: "http://query.yahooapis.com/v1/public/yql",
    jsonp: "callback",
    dataType: "jsonp",
    data: {
        q: "select title,abstract,url from search.news where query=\"cat\"",
        format: "json"
    },
    success: function( response ) {
        console.log( response ); // server response
    }
});

documentation jquery: https://learn.jquery.com/ajax/working-with-jsonp/

4
Bamieh

Si vous définissez CORS "complet" (avec pré-demande OPTION) dans nginx en ajoutant 'access-control-allow-Origin *' et indépendamment vous ajoutez cet en-tête (pour CORS simple - sans pré-requête OPTION) à chaque réponse dans SERVER (par exemple php):

header('Access-Control-Allow-Origin', "*");

Ensuite, vous obtiendrez ce problème. Solution: supprimez le code qui ajoute cet en-tête au serveur si vous ajoutez déjà cet en-tête dans votre configuration nginx :)

J'ai trouvé ce conseil ici

4
Kamil Kiełczewski