Question Comment autoriser CORS?


J'essaie de prendre en charge CORS dans mon application Node.js qui utilise le framework Web Express.js. J'ai lu une discussion de groupe Google sur la façon de gérer cela, et lisez quelques articles sur le fonctionnement de la SCRO. D'abord, je l'ai fait (le code est écrit en syntaxe CoffeeScript):

app.options "*", (req, res) ->
  res.header 'Access-Control-Allow-Origin', '*'
  res.header 'Access-Control-Allow-Credentials', true
  # try: 'POST, GET, PUT, DELETE, OPTIONS'
  res.header 'Access-Control-Allow-Methods', 'GET, OPTIONS'
  # try: 'X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept'
  res.header 'Access-Control-Allow-Headers', 'Content-Type'
  # ...

Cela ne semble pas fonctionner. Il semble que mon navigateur (Chrome) n'envoie pas la requête OPTIONS initiale. Lorsque je viens de mettre à jour le bloc pour la ressource, je dois soumettre une requête GET d'origine croisée à:

app.get "/somethingelse", (req, res) ->
  # ...
  res.header 'Access-Control-Allow-Origin', '*'
  res.header 'Access-Control-Allow-Credentials', true
  res.header 'Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE, OPTIONS'
  res.header 'Access-Control-Allow-Headers', 'Content-Type'
  # ...

Cela fonctionne (dans Chrome). Cela fonctionne également dans Safari.

J'ai lu ça ...

Dans un navigateur implémentant CORS, chaque requête GET ou POST d'origine croisée est précédée d'une requête OPTIONS qui vérifie si le GET ou le POST est OK.

Donc, ma question principale est, comment se fait-il que cela ne semble pas arriver dans mon cas? Pourquoi mon bloc app.options n'est-il pas appelé? Pourquoi dois-je définir les en-têtes dans mon bloc app.get principal?


481
2017-08-15 16:53


origine


Réponses:


Pour répondre à votre question principale, la spécification CORS nécessite uniquement l'appel OPTIONS pour précéder le POST ou GET si le POST ou GET a un contenu ou des en-têtes non simples.

Voir Référence de l'API Web MDN - Requêtes de contrôle en amont CORS


91
2017-12-20 08:32



J'ai trouvé le moyen le plus simple d'utiliser le package node.js cors. L'utilisation la plus simple est la suivante:

var cors = require('cors')

var app = express()
app.use(cors())

Il existe bien sûr de nombreuses façons de configurer le comportement en fonction de vos besoins. la page ci-dessus montre un certain nombre d'exemples.


536
2018-02-07 08:16



Essayez de passer le contrôle au prochain itinéraire correspondant. Si Express correspond à l'itinéraire app.get en premier, il ne continuera pas sur la route des options à moins que vous ne le fassiez (notez l'utilisation de la prochaine):

app.get('somethingelse', function(req, res, next) {
    //..set headers etc.

    next();
});

Pour ce qui est de l'organisation du CORS, je l'ai mis dans un intergiciel qui fonctionne bien pour moi:

//CORS middleware
var allowCrossDomain = function(req, res, next) {
    res.header('Access-Control-Allow-Origin', 'example.com');
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
    res.header('Access-Control-Allow-Headers', 'Content-Type');

    next();
}

//...
app.configure(function() {
    app.use(express.bodyParser());
    app.use(express.cookieParser());
    app.use(express.session({ secret: 'cool beans' }));
    app.use(express.methodOverride());
    app.use(allowCrossDomain);
    app.use(app.router);
    app.use(express.static(__dirname + '/public'));
});

402
2017-08-15 19:45



Rester dans la même idée de routage. J'utilise ce code:

app.all('/*', function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "X-Requested-With");
  next();
});

Semblable à http://enable-cors.org/server_expressjs.html Exemple


106
2018-02-24 10:46



J'ai créé un middleware plus complet, adapté à l'express ou à la connexion. Elle supporte OPTIONS demandes de contrôle en amont. Notez qu'il permettra à CORS d'accéder à n'importe quoi, vous pourriez vouloir mettre quelques contrôles si vous voulez limiter l'accès.

app.use(function(req, res, next) {
    var oneof = false;
    if(req.headers.origin) {
        res.header('Access-Control-Allow-Origin', req.headers.origin);
        oneof = true;
    }
    if(req.headers['access-control-request-method']) {
        res.header('Access-Control-Allow-Methods', req.headers['access-control-request-method']);
        oneof = true;
    }
    if(req.headers['access-control-request-headers']) {
        res.header('Access-Control-Allow-Headers', req.headers['access-control-request-headers']);
        oneof = true;
    }
    if(oneof) {
        res.header('Access-Control-Max-Age', 60 * 60 * 24 * 365);
    }

    // intercept OPTIONS method
    if (oneof && req.method == 'OPTIONS') {
        res.send(200);
    }
    else {
        next();
    }
});

46
2017-10-30 21:49



faire

npm install cors --save

et ajoutez simplement ces lignes dans votre fichier principal où va votre requête.

const cors = require('cors');
const express = require('express');
let app = express();
app.use(cors());
app.options('*', cors());

46
2017-07-21 09:26



installer le module cors d’expressjs. vous pouvez suivre ces étapes>

Installation 

npm install cors

Utilisation simple (Activer toutes les demandes CORS)

var express = require('express');
var cors = require('cors');
var app = express();
app.use(cors());

pour plus de détails allez à https://github.com/expressjs/cors


31
2018-06-15 20:37



Faites quelque chose comme ça:

app.use(function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    next();
});

29
2018-01-03 08:24



Test effectué avec express + node + ionique dans différents ports.

Localhost:8100

Localhost:5000

// CORS (Cross-Origin Resource Sharing) headers to support Cross-site HTTP requests

app.all('*', function(req, res, next) {
       res.header("Access-Control-Allow-Origin", "*");
       res.header("Access-Control-Allow-Headers", "X-Requested-With");
       res.header('Access-Control-Allow-Headers', 'Content-Type');
       next();
});

18
2017-11-08 20:35



Tout d'abord, installez simplement des cors dans votre projet. Prenez le terminal (invite de commande) et cd dans votre répertoire de projet et exécutez la commande ci-dessous:

npm install cors --save

Ensuite, prenez le fichier server.js et changez le code pour ajouter ce qui suit:

var cors = require('cors');


var app = express();

app.use(cors());

app.use(function(req, res, next) {
   res.header("Access-Control-Allow-Origin", "*");
   res.header('Access-Control-Allow-Methods', 'DELETE, PUT, GET, POST');
   res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
   next();
});

Cela a fonctionné pour moi ..


16
2017-09-05 09:08