J'utilise AngularJS $ http côté client pour accéder à un point de terminaison d'une application API Web ASP.NET côté serveur. Comme le client est hébergé sur un domaine différent de celui du serveur, j'ai besoin de CORS. Cela fonctionne pour $ http.post (url, données). Mais dès que j'authentifie l'utilisateur et fais une demande via $ http.get (url), je reçois le message
L'en-tête «Access-Control-Allow-Origin» contient plusieurs valeurs «http://127.0.0.1:9000, http://127.0.0.1:9000», mais une seule est autorisée. L'accès d'origine 'http://127.0.0.1:9000' n'est donc pas autorisé.
Fiddler me montre qu'il y a en effet deux entrées d'en-tête dans la requête get après une requête d'options réussie. Quoi et où est-ce que je fais quelque chose de mal?
Mettre à jour
Lorsque j'utilise jQuery $ .get au lieu de $ http.get, le même message d'erreur apparaît. Cela ne semble donc pas un problème avec AngularJS. Mais où est-ce mal?
asp.net-web-api
cors
angularjs-http
Papa Mufflon
la source
la source
Réponses:
J'ai ajouté
config.EnableCors(new EnableCorsAttribute(Properties.Settings.Default.Cors, "", ""))
aussi bien que
app.UseCors(CorsOptions.AllowAll);
sur le serveur. Cela entraîne deux entrées d'en-tête. Utilisez simplement ce dernier et cela fonctionne.
la source
Nous avons rencontré ce problème car nous avions configuré CORS selon les meilleures pratiques (par exemple http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api ) ET AUSSI avait un en-tête personnalisé
<add name="Access-Control-Allow-Origin" value="*"/>
dans web.config.Supprimez l'entrée web.config, et tout va bien.
Contrairement à la réponse de @ mww, nous avons toujours
EnableCors()
dans le WebApiConfig.cs ET unEnableCorsAttribute
sur le contrôleur. Lorsque nous avons éliminé l'un ou l'autre, nous avons rencontré d'autres problèmes.la source
J'utilise Cors 5.1.0.0, après beaucoup de maux de tête, j'ai découvert que le problème était la duplication des en-têtes Access-Control-Allow-Origin & Access-Control-Allow-Header du serveur
Supprimé
config.EnableCors()
du fichier WebApiConfig.cs et définissez simplement l'[EnableCors("*","*","*")]
attribut sur la classe ControllerConsultez cet article pour plus de détails.
la source
Ajouter au registre WebApiConfig
Ou web.config
MAIS PAS LES DEUX
la source
En fait, vous ne pouvez pas définir plusieurs en-têtes
Access-Control-Allow-Origin
(ou du moins cela ne fonctionnera pas dans tous les navigateurs). Au lieu de cela, vous pouvez définir conditionnellement une variable d'environnement, puis l'utiliser dans laHeader
directive:Donc, dans cet exemple, l'en-tête de réponse sera ajouté uniquement si un en-tête de demande
Origin
correspond à RegExp:^(https?://localhost|https://[a-z]+\.my\.base\.domain)$
(cela signifie essentiellement localhost sur HTTP ou HTTPS et * .my.base.domain sur HTTPS).N'oubliez pas d'activer
setenvif
module.Documents:
BTW. Le
}e
dans%{ORIGIN_SUB_DOMAIN}e
n'est pas une faute de frappe. C'est la façon dont vous utilisez la variable d'environnement dans laHeader
directive.la source
J'avais aussi OWIN ainsi que mon WebAPI qui avaient apparemment besoin d'activer CORS séparément, ce qui à son tour a créé l'
'Access-Control-Allow-Origin' header contains multiple values
erreur.J'ai fini par supprimer TOUT le code qui
system.webServer
activait CORS, puis j'ai ajouté ce qui suit au nœud de mon Web.Config:Cela répondait aux exigences CORS pour OWIN (permettant la connexion) et pour WebAPI (permettant les appels d'API), mais cela créait un nouveau problème: une
OPTIONS
méthode n'a pas pu être trouvée pendant le contrôle en amont pour mes appels d'API. Le correctif pour cela était simple - j'avais juste besoin de supprimer ce qui suit duhandlers
nœud my Web.Config:J'espère que cela aide quelqu'un.
la source
Serveur Apache:
Je dépense la même chose, mais c'était parce que je n'avais pas de guillemets (") l'astérisque dans mon fichier qui donnait accès au serveur, par exemple '.htaccess.':
Vous pouvez également avoir un fichier «.htaccess» dans un dossier avec un autre «.htaccess», par exemple
Dans votre cas, au lieu de '*', l'astérisque serait le
http://127.0.0.1:9000
serveur ip ( ) auquel vous donnez l'autorisation de servir des données.ASP.NET:
Vérifiez qu'il n'y a pas de duplicata 'Access-Control-Allow-Origin' dans votre code.
Outils de développement:
Avec Chrome, vous pouvez vérifier les en-têtes de vos demandes. Appuyez sur la touche F12 et allez dans l'onglet 'Réseau', lancez maintenant la requête AJAX et apparaîtra sur la liste, cliquez et donnez toutes les informations qui s'y trouvent.
la source
Cela se produit lorsque l'option Cors est configurée à plusieurs endroits. Dans mon cas, je l'avais au niveau du contrôleur ainsi que dans Startup.Auth.cs / ConfigureAuth.
Ma compréhension est que si vous voulez que l'application soit large, configurez-la simplement sous Startup.Auth.cs / ConfigureAuth comme ceci ... Vous aurez besoin d'une référence à Microsoft.Owin.Cors
Si vous préférez le garder au niveau du contrôleur, vous pouvez simplement l'insérer au niveau du contrôleur.
la source
si vous êtes dans IIS, vous devez activer CORS dans web.config, vous n'avez pas besoin de l'activer dans la méthode App_Start / WebApiConfig.cs Register
Ma solution était de commenter les lignes ici:
et écrivez dans le web.config:
la source
Cela peut également se produire bien sûr si vous avez défini votre
Access-Control-Allow-Origin
tête pour avoir plusieurs valeurs - Par exemple, une liste de valeurs séparées par des virgules, qui est en quelque sorte prise en charge dans la RFC mais n'est pas réellement prise en charge par la plupart des principaux navigateurs. Notez que la RFC explique comment autoriser plus d'un domaine sans utiliser également «*».Par exemple, vous pouvez obtenir cette erreur dans Chrome en utilisant un en-tête comme celui-ci:
Access-Control-Allow-Origin: http://test.mysite.com, http://test2.mysite.com
C'était dans
Chrome Version 64.0.3282.186 (Official Build) (64-bit)
Notez que si vous envisagez cela à cause d'un CDN et que vous utilisez Akamai, vous voudrez peut-être noter que qu'Akamai ne se mettra pas en cache sur le serveur si vous l'utilisez
Vary:Origin
, comme beaucoup suggèrent de résoudre ce problème.Vous devrez probablement changer la façon dont votre clé de cache est construite, en utilisant un comportement de réponse «Modification d'ID de cache». Plus de détails sur ce problème dans cette question liée à StackOverflow
la source
Access-Control-Allow-Origin: http://test.mysite.com http://test2.mysite.com
. Ce serait la bonne façon, mais les navigateurs ne suivent pas la norme ici ( source ).Si stupide et simple:
Ce problème s'est produit pour moi lorsque j'ai deux fois
Header always set Access-Control-Allow-Origin *
dans mon fichier de configuration Apache. Une fois avec lesVirtualHost
balises et une fois dans uneLimit
balise:La suppression d'une entrée a résolu le problème.
Je suppose que dans le message original, cela aurait été deux fois:
la source
vient d'avoir ce problème avec un serveur nodejs.
voici comment je l'ai réparé.
Je lance mon serveur de nœud via un
nginx proxy
et j'ai défini nginx etnode
les deuxallow cross domain requests
et cela n'a pas plu, alors je l'ai retiré de nginx et je l'ai laissé dans le nœud et tout allait bien.la source
rack-cors
gem gérer les choses CORS. Bam, fixe.J'ai rencontré le même problème et voici ce que j'ai fait pour le résoudre:
Dans le service WebApi, dans Global.asax, j'ai écrit le code suivant:
Ici, ce code autorise uniquement le pré-vol et la demande de jeton d'ajouter "Access-Control-Allow-Origin" dans la réponse sinon je ne l'ajoute pas.
Voici mon blog sur la mise en œuvre: https://ibhowmick.wordpress.com/2018/09/21/cross-domain-token-based-authentication-with-web-api2-and-jquery-angular-5-angular- 6 /
la source
pour ceux qui utilisent IIS avec php, sur IIS, mettez à jour le fichier web.config côté serveur dans le répertoire racine (wwwroot) et ajoutez ceci
après cela, redémarrez le serveur IIS, tapez IISReset dans RUN et entrez
la source
Voici une autre instance similaire aux exemples ci-dessus où vous ne pouvez avoir qu'un seul fichier de configuration pour définir où se trouve CORS: il y avait deux fichiers web.config sur le serveur IIS sur le chemin dans différents répertoires, et l'un d'eux était caché dans le répertoire virtuel. Pour le résoudre, j'ai supprimé le fichier de configuration de niveau racine car le chemin utilisait le fichier de configuration dans le répertoire virtuel. Il faut choisir l'un ou l'autre.
la source
L'en-tête "Access-Control-Allow-Origin" contient plusieurs valeurs
quand j'ai reçu cette erreur, j'ai passé des tonnes d'heures à chercher une solution mais rien ne fonctionne, enfin j'ai trouvé une solution à ce problème qui est très simple. lorsque l'en-tête `` Access-Control-Allow-Origin '' a été ajouté plus d'une fois à votre réponse, cette erreur se produit, vérifiez votre apache.conf ou httpd.conf (serveur Apache), script côté serveur, et supprimez l'en-tête d'entrée indésirable de ces fichiers .
la source