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?
risposta
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();
})
})
Grazie. Spero che questo venga votato come risposta ... implementazione molto più pulita. –
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
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");
});
Akshat, potrebbe leggere FileSync in questo caso è stato utilizzato per ridurre il codice? – matb33
Ottima idea! Ho scambiato il codice – Akshat
@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
Penso che sia impossibile nello stato attuale del core Meteor. Abbiamo sicuramente bisogno di un modo per personalizzare le intestazioni di 'HTTP'. – mquandalle
Non c'è nemmeno un modo hackish? Se volessi usare un fork di Meteor, cosa dovrei cambiare per questo? – Mitar
Suggerirei che la risposta di Thomas sia corretta, ora. Modo pulito per accedere al middleware di connessione senza pacchetto/hack di terze parti. –