4

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

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。但是,在打印返回的标题后,我没有看到content-range我尝试设置的属性。

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

4

2 回答 2

2

使用range标题:

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

content-range如果使用的服务器支持内容范围,则响应应该有一个标头。

当然,这需要一个支持请求范围的主机。我已经尝试了上面的代码,它确实可以http://www.microsoft.com作为url.

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

一种相当奇怪的替代方法是手动将网页请求为套接字,并在您获得比您需要的更多字节时切断。

于 2015-05-26T16:09:39.610 回答
1

通常,如果您想始终获取标题,则不能有固定限制:

  1. 某些 HTTP 服务器不支持范围标头:如何确定服务器是否支持范围标头?
  2. 你不能保证 X 字节总是包含标题。例如,它可能出现在 1000 字节之后。

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

如果必须优化,您可以使用以前的方法,获取 100 个字节,但如果您没有找到,则</title>回退到下载整个 HTML 文件。

于 2015-06-01T09:56:12.257 回答