2013-04-11 12 views
13

Come è possibile aggiungere l'intestazione Access-Control-Allow-Origin: * a tutte le risposte (in particolare, sono interessato ai file statici sotto /public/) in Meteor? Avrei bisogno di questo in modo che le app web esterne possano accedere ai dati forniti dalla mia app Meteor. Ulteriori informazioni sull'attivazione di CORS is here.Come aggiungere intestazioni CORS a un'app Meteor?

+2

Penso che sia impossibile nello stato attuale del core Meteor. Abbiamo sicuramente bisogno di un modo per personalizzare le intestazioni di 'HTTP'. – mquandalle

+0

Non c'è nemmeno un modo hackish? Se volessi usare un fork di Meteor, cosa dovrei cambiare per questo? – Mitar

+1

Suggerirei che la risposta di Thomas sia corretta, ora. Modo pulito per accedere al middleware di connessione senza pacchetto/hack di terze parti. –

risposta

18

Ecco un piccolo frammento che ho scritto. Puoi usare un esempio su come accedere al core connect di meteor e modificare le intestazioni, anche un buon drop-in per ogni progetto meteor:

/** 
* HTTP Header Security 
* 
* enforce HTTP Strict Transport Security (HSTS) to prevent ManInTheMiddle-attacks 
* on supported browsers (all but IE) 
* > http://www.html5rocks.com/en/tutorials/security/transport-layer-security 
* 
* @header Strict-Transport-Security: max-age=2592000; includeSubDomains 
*/ 

var connectHandler = WebApp.connectHandlers; // get meteor-core's connect-implementation 

// attach connect-style middleware for response header injection 
Meteor.startup(function() { 
    connectHandler.use(function (req, res, next) { 
    res.setHeader('Strict-Transport-Security', 'max-age=2592000; includeSubDomains'); // 2592000s/30 days 
    return next(); 
    }) 
}) 
+0

Grazie. Spero che questo venga votato come risposta ... implementazione molto più pulita. –

+1

Con l'ultima versione di Meteor (0.8.2) è possibile utilizzare l'hook "WebApp.rawConnectHandlers'", vedere https://github.com/mizzao/meteor-timesync/blob/master/timesync-server.js – hiddentao

8

Ci sono due modi per farlo. Uno è quello di modificare il codice meteor e aggiungerlo (in modo che ogni file abbia questa intestazione). Questa potrebbe non essere una buona idea, perché non vuoi che ogni singolo file abbia questo. Ma se si modificano fino farlo con aggancio in applicazione

var app = __meteor_bootstrap__.app; 
app.use(function(req,res) { 
    res.setHeader('access-control-allow-origin', '*'); 
}); 

L'altro è quello di utilizzare un percorso personalizzato con qualcosa come meteor router. In questo modo è possibile controllare quali file si desidera avere le intestazioni in modo che il suo probabilmente meglio usare qualcosa di simile

js lato server:

Meteor.Router.add('/yourfile.txt', function() { 
    this.response.setHeader('access-control-allow-origin', '*'); 

    var fs = Npm.require("fs"); 
    return fs.readFileSync("/public/yourfile.txt", "utf8"); 

}); 
+0

Akshat, potrebbe leggere FileSync in questo caso è stato utilizzato per ridurre il codice? – matb33

+0

Ottima idea! Ho scambiato il codice – Akshat

+0

@akshat punto di chiarimento ... stai parlando di fare una modifica nel nucleo della meteora? da qualche parte intorno: https://github.com/meteor/meteor/blob/master/tools/server/server.js#L297 ? – zeroasterisk

Problemi correlati