如何将CORS标头添加到Meteor应用程序?

时间:2013-04-11 21:50:41

标签: meteor cors

如何在Meteor中为所有响应添加Access-Control-Allow-Origin: *标头(特别是我对/public/下的静态文件感兴趣?)?我需要这样,以便外部Web应用程序可以访问我的Meteor应用程序提供的数据。有关启用CORS is here的更多信息。

2 个答案:

答案 0 :(得分:19)

这是我写的一小段。您可以使用如何访问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();
  })
})

答案 1 :(得分:8)

有两种方法可以解决这个问题。一种是修改流星代码并将其添加(以便每个文件都有这个标题)。这可能不是一个好主意,因为你不希望每个文件都有这个。但是,如果你做了改进,请挂钩应用程序

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

另一种方法是使用meteor router之类的自定义路线。通过这种方式,您可以控制要包含标题的文件,因此最好使用此类

服务器端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");

});