如何获取 Meteor 的 HTTP.call(或 get)方法来修改 HTTP 请求 Headers?

How can I get Meteor's HTTP.call (or get) method to modify the HTTP request Headers?

我试图通过只加载足够的网页内容来获取其 HTML 的 <head> 标签来加快我的 Meteor 应用程序的速度,以获得其标题、图像和描述。 我有一个客户端使用以下代码调用 server-side 方法:

Meteor.call("metaGetter", url, function(err, res){...});

而在服务器端,在 metaGetter 方法中,我使用的是 Meteor 的 HTTP.call:

var result = HTTP.call('GET', url, {headers: {'content-range': "bytes 0-100"}});

如 Meteor 文档中所写。我能够得到结果的内容,html。但是,打印返回的 headers 后,我没有看到我尝试设置的 content-range 属性。

编辑:Akshat 的解决方案有效,但仅适用于某些网站,实际上很少。任何帮助将不胜感激。

使用 range header:

var result = HTTP.call('GET', url, {headers: {'range': "bytes=0-100"}});

如果使用的服务器支持内容范围,响应应该有 content-range header。

当然,这需要一个支持请求范围的主机。我试过上面的代码,它在 http://www.microsoft.com 作为 url.

工作

遗憾的是,除了请求整个文档之外,对于不支持它的网站,您真的无能为力。

一个相当奇怪的替代方法是手动请求网页作为套接字,并在您获得的字节数超过您需要的字节数时切断。

一般来说,如果您希望始终获取标题,则不能设置固定限制:

  1. 一些 HTTP 服务器不支持范围 header:How can I find out whether a server supports the Range header?
  2. 您不能保证 X 字节始终包含标题。例如。它可能出现在 1000 字节之后。

通常我会获取整个 HTML 文件。在大多数像样的服务器上,这应该少于 100 毫秒。人类几乎察觉不到。如果您经常这样做,您可能希望允许并行执行服务器端方法(参见 http://docs.meteor.com/#/full/method_unblock

如果必须进行优化,您可以使用之前的方法,获取 100 个字节,但是如果您没有找到 </title>,那么您将返回下载整个 HTML 文件。