Подтвердить что ты не робот

Как добавить заголовки CORS в приложение Meteor?

Как можно добавить заголовок Access-Control-Allow-Origin: * ко всем ответам (в частности, меня интересуют статические файлы под /public/) в Meteor? Мне нужно это, чтобы внешние веб-приложения могли получать доступ к данным, предоставляемым моим приложением Meteor. Подробнее о включении CORS здесь.

4b9b3361

Ответ 1

Вот небольшой фрагмент, который я написал. Вы можете использовать в качестве примера, как получить доступ к ядру meteor core и изменить заголовки, а также довольно хорошее падение для каждого проекта 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 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();
  })
})

Ответ 2

Есть два способа обойти это. Один из них - изменить код метеора и добавить его (чтобы каждый файл имел этот заголовок). Это может быть не очень хорошая идея, потому что вы не хотите, чтобы каждый файл имел это. Но если вы действительно переделываете это, подключайтесь к приложению

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

Другим является использование настраиваемого маршрута с чем-то вроде метеоритного маршрутизатора. Таким образом, вы можете контролировать, какие файлы вы хотите иметь заголовки, поэтому, вероятно, лучше всего использовать что-то вроде этого

Серверная сторона js:

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");

});