3

somwhere.com/noo.bin 上有一个大的二进制文件

我想在我的网络应用程序上将此发送给用户。

我不想将此文件保存在我的服务器上然后提供它,想知道是否有一种方法可以流式传输我的 Web 应用程序充当代理的文件(该文件看起来像 mysite.com/noo.bin)

4

2 回答 2

9

安装request,然后:

var http = require('http'),
    request = require('request'),
    remote = 'http://somewhere.com';

http.createServer(function (req, res) {
  // http://somewhere.com/noo.bin
  var remoteUrl = remote + req.url;
  request(remoteUrl).pipe(res);
}).listen(8080);
于 2013-09-18T18:36:09.113 回答
3

尽管我自己会准确地写出@LaurentPerrin 的答案,但为了完整起见,我应该这样说:

该方法的缺点是您发送到somewhere.com的请求标头与您的服务器获得的请求标头无关。例如:如果发送给您的请求具有 的特定值Accept-Language,那么(如代码所示)您可能不会在Accept-Value从 代理时指定相同的值somewhere.com。因此,资源可能会以错误的语言返回给您(然后从您返回给原始请求者)。

或者,如果向您发出请求Accept-Encoding: gzip,当前代码将解压缩大文件,并将其流回未压缩,此时您可以通过接受并流回压缩文件来节省带宽和时间。

这可能与您相关,也可能不相关。

如果您认为需要传递重要的标头,您可以添加一些代码以将它们从您的请求显式复制到您正在发送的请求中somewhere.com,然后将相关的响应标头复制回来,或者node-http-proxyhttps://github.com上使用/nodejitsu/node-http-proxy

使用 node-http 代理的转发代理的示例是https://github.com/nodejitsu/node-http-proxy/blob/master/examples/http/forward-proxy.js

于 2013-09-18T19:06:01.547 回答