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

时间:2015-05-26 15:49:38

标签: javascript meteor http-headers http-get http-range

我正在尝试通过仅加载足够的网页内容来获取其HTML的<head>标记以获取其标题,图像和描述来加速我的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的解决方案有效,但仅适用于某些网站,实际上很少。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

使用range标题:

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

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

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

它的伤心地说没有什么你可以不支持它除了要求整个文档的网站做的确实。

一个相当奇怪的选择是手动请求网页作为套接字,并在获得比您需要的更多字节时切断。

答案 1 :(得分:1)

一般情况下,如果您想要总是获取标题,则无法获得固定限制:

  1. 某些HTTP服务器不支持范围标题:How can I find out whether a server supports the Range header?
  2. 您无法保证X字节始终包含标题。例如。它可能出现在1000个字节之后。
  3. 一般情况下,我会获取整个HTML文件。在大多数体面的服务器上,这应该不到100毫秒。人类几乎无法察觉。如果你这么做,你可能希望允许并行执行服务器端方法(参见http://docs.meteor.com/#/full/method_unblock

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