来自amazon s3的node.js expressjs代理静态

来自amazon s3的node.js expressjs代理静态,node.js,express,amazon-s3,knox-amazon-s3-client,Node.js,Express,Amazon S3,Knox Amazon S3 Client,当一个页面请求进来时,例如app.get(“/”)我想从AmazonS3返回一个静态HTML页面。我知道我可以从S3请求它,然后发送它,但这似乎很慢。是否需要告诉请求者直接从s3获取文件而不更改url 谢谢 如果做不到这一点,从s3提供文件的最快方式是什么 本教程显示如何先编写文件 有没有一种不用先写就发送文件的方法?写入速度似乎非常慢。如果s3页面是真正静态的(例如很少更改),服务器肯定会在第一次请求时加载并缓存它;这不会导致任何明显的减速 否则,我会重新考虑“不改变URL”的要求;最常见的

当一个页面请求进来时,例如
app.get(“/”)
我想从AmazonS3返回一个静态HTML页面。我知道我可以从S3请求它,然后发送它,但这似乎很慢。是否需要告诉请求者直接从s3获取文件而不更改url

谢谢

如果做不到这一点,从s3提供文件的最快方式是什么

本教程显示如何先编写文件


有没有一种不用先写就发送文件的方法?写入速度似乎非常慢。

如果s3页面是真正静态的(例如很少更改),服务器肯定会在第一次请求时加载并缓存它;这不会导致任何明显的减速


否则,我会重新考虑“不改变URL”的要求;最常见的“解决方案”是通常涉及框架的黑客攻击。

正如您所怀疑的,如果不更改URL,您无法让请求者直接从S3获取。您必须代理远程页面:

var http = require('http'),
    express = require('express'),
    app = express();

app.get('/', function(req, res) {
  http.get('http://www.stackoverflow.com', function(proxyRes) {
    proxyRes.pipe(res);
  });
});

app.listen(8080);

您可以缓存远程页面以获得更好的性能。

我相信此重定向会更改url并弄乱相关链接?是的,HTTP重定向总是更改可见的url(我刚刚用301、302、303和307进行了测试)。我将使用代理解决方案更新我的答案。在代理解决方案中,用户是否能够找到S3的URL?否,文件将显示为源于您的服务器。当浏览器缓存请求并且您应该发送304 not modified时,这是否正确响应?我相信只有3个选项:1)
iframe
;2) 缓存html;3) 重定向。也许您可以使用反向代理(比如nginx)来服务它,并让html缓存在用户的浏览器中。
var http = require('http'),
    express = require('express'),
    app = express();

app.get('/', function(req, res) {
  http.get('http://www.stackoverflow.com', function(proxyRes) {
    proxyRes.pipe(res);
  });
});

app.listen(8080);