XMLHttpRequest cannot load http://localhost:8080/api/test. Origin http://localhost:3000 is not allowed by Access-Control-Allow-Origin.
J'ai lu sur les demandes ajax interdomaines et je comprends le problème de sécurité sous-jacent. Dans mon cas, 2 serveurs fonctionnent localement et aiment activer les requêtes interdomaines pendant les tests.
localhost:8080 - Google Appengine dev server
localhost:3000 - Node.js server
J'émets une requête ajax à localhost:8080 - GAE server
pendant que ma page est chargée à partir du serveur de nœuds. Quel est le plus simple et le plus sûr (je ne veux pas démarrer Chrome avec l' disable-web-security
option). Si je dois changer 'Content-Type'
, dois-je le faire sur le serveur de nœuds? Comment?
Réponses:
Puisqu'ils fonctionnent sur des ports différents, ils sont différents en JavaScript
origin
. Peu importe qu'ils soient sur la même machine / nom d'hôte.Vous devez activer CORS sur le serveur (localhost: 8080). Consultez ce site: http://enable-cors.org/
Tout ce que vous avez à faire est d'ajouter un en-tête HTTP au serveur:
Ou, pour plus de simplicité:
Je pense que n'utilisez pas "*" si votre serveur tente de définir un cookie et que vous utilisez
withCredentials = true
Vous pouvez en savoir plus
withCredentials
icila source
Access-Control-Allow-Origin
tête donné doit être un en-tête ajouté aux réponses HTTP que le serveur envoie. Cet en-tête doit faire partie de la réponse du serveur, il n'a pas besoin de faire partie de la demande du client . Plus précisément, ce qui se passe avant que le client ne fasse la demande que vous souhaitez, le navigateur envoie uneOPTIONS
demande avant lui, et si la réponse du serveur à cetteOPTIONS
demande ne contient pas l'en-tête, le navigateur n'enverra pas la demande souhaitée.Si vous avez besoin d'une solution rapide dans Chrome pour les requêtes ajax, ce plugin Chrome vous permet automatiquement d'accéder à n'importe quel site à partir de n'importe quelle source en ajoutant l'en-tête de réponse approprié
Extension Chrome Allow-Control-Allow-Origin: *
la source
Vous devez activer CORS pour résoudre ce problème
si votre application est créée avec simple node.js
définissez-le dans vos en-têtes de réponse comme
si votre application est créée avec un framework express
utiliser un middleware CORS comme
et postulez via
Voici deux liens de référence
la source
config.allowedDomains
. dire dans mon cas quel uri dois-je y mettre?*
ou celui auquelspecific domain
vous souhaitez donner accès.app.configure()
une erreur de fonction?J'accepte la réponse de @Rocket Hazmat car elle me conduit à la solution. C'était en effet sur le serveur GAE dont j'avais besoin pour définir l'en-tête. Je devais régler ces
le réglage n'a
"Access-Control-Allow-Origin"
donné qu'une erreurDe plus, si un jeton d'authentification doit être envoyé, ajoutez-le également
Aussi, chez le client, définissez
withCredentials
cela provoque l'envoi de 2 requêtes au serveur, une avec
OPTIONS
. Le cookie d'authentification n'est pas envoyé avec lui, il faut donc traiter l'authentification externe.la source
Dans router.js, ajoutez simplement du code avant d'appeler les méthodes get / post. Cela fonctionne pour moi sans erreurs.
la source
J'étais confronté à un problème en appelant la ressource d'origine croisée en utilisant ajax à partir de chrome.
J'ai utilisé le nœud js et le serveur http local pour déployer mon application nœud js.
J'obtenais une réponse d'erreur, lorsque j'accède à la ressource cross origin
J'ai trouvé une solution là-dessus,
1) J'ai ajouté le code ci-dessous à mon fichier app.js
2) Dans ma page html appelée ressource d'origine croisée en utilisant
$.getJSON();
la source
Si vous utilisez express, vous pouvez utiliser le middleware cors comme suit:
la source
Ajoutez ceci à votre serveur NodeJS ci-dessous les importations:
la source
Si vous obtenez 403 après cela, veuillez réduire les filtres de la configuration tomcat WEB.XML comme suit:
la source
J'ai enfin la réponse pour apache Tomcat8
Vous devez éditer le fichier tomcat web.xml.
ce sera probablement dans le dossier webapps,
trouvez-le et modifiez-le
Cela permettra à tous les hôtes Access-Control-Allow-Origin. Si vous avez besoin de le changer de tous les hôtes à votre hôte uniquement, vous pouvez modifier le
ci-dessus de * à votre http: // your_public_IP ou http://www.example.com
vous pouvez vous référer ici à la documentation du filtre Tomcat
Merci
la source
Salut C'est le moyen de résoudre le problème CORS dans le nœud Ajoutez simplement ces lignes du côté serveur "api" dans Node.js (ou quel que soit votre fichier serveur), avant cela assurez-vous d'installer "cors"
la source
utilisez dataType: 'jsonp', ça marche pour moi.
la source
Pour PHP, utilisez ceci pour définir les en-têtes.
la source
ajoutez ceci à vos itinéraires que vous appelez depuis le front-end. Ex - si vous appelez http: // localhost: 3000 / users / register, vous devez ajouter ce fragment de code sur votre fichier .js back-end que cette route établit.
la source
Au cas où quelqu'un chercherait la solution, si vous utilisez express, voici la solution rapide.
1) installer des cors en utilisant npm
npm install cors --save
2) l'importer [exiger]
const cors = require('cors')
3) utilisez-le comme middleware
app.use(cors())
pour plus de détails et l'utilisation des cors . Voilà, j'espère que cela fonctionne.
la source
Si vous êtes dans Google Chrome, essayez d'installer ce module complémentaire:
https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi/related
la source