【问题标题】:Random render page content not working on AWS CloudFront (node.js)随机渲染页面内容在 AWS CloudFront (node.js) 上不起作用
【发布时间】:2020-02-27 13:07:25
【问题描述】:

我的目的是随机渲染页面内容。我使用的代码如下:

app.js

routes.get('/', function(req, res) {
    var condition = Math.round(Math.random());
    if (condition == 0) {
        var data = ejs.render(index, {cquestions, questions});
        res.send(data);
    }
    else {
        var data = ejs.render(index, {cquestions, questions: questions2});
        res.send(data);
    }
});

我已经在 localhost 和 Amazon EC2 实例上全面测试了代码。 该页面在两者上都能完美运行。

但是,一旦我通过域名(由 CloudFront 分发)查询页面,页面将不会随机呈现。 我使用 CloudFront 的原因是将 SSL 添加到页面,以便我可以访问用户设备。

我猜原因可能是CloudFront将渲染的页面保存在缓存中,这样一旦我连接到服务器,页面就不会再次渲染。

但是有什么方法可以实现随机呈现页面的目标吗?

谢谢

【问题讨论】:

  • 如果在res.send(...) 之前添加res.header('Cache-Control','max-age=0'); 会发生什么?
  • @Michael-sqlbot 我认为它有效!我还更改了 CloudFront 上的 TTL
  • @Michael-sqlbot 哦,页面完全没有变化了......
  • 我知道了,max-age 必须匹配 TTL。非常感谢
  • 如果Cache-Control 标头真的 设置为max-age=0,则无需更改最大TTL。最大 TTL 是 Cache-Control max-ages-maxage 中较大值的上限。较小的 max-age/s-maxage 值会覆盖最大 TTL 值。

标签: node.js amazon-ec2 https ejs amazon-cloudfront


【解决方案1】:

为路由设置res.header('Cache-Control','max-age=0'),然后将 CloudFront 上的最大 TTL 也设置为 0。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-16
    相关资源
    最近更新 更多