Как я могу получить метод Meteor HTTP.call (или get) для изменения заголовков HTTP-запроса?

Я пытаюсь ускорить свое приложение Meteor, загружая только достаточно содержимого веб-страницы, чтобы получить <head> тег его HTML, чтобы получить его заголовок, изображение и описание. У меня есть клиент, вызывающий метод на стороне сервера со следующим кодом:

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

И на стороне сервера, в metaGetter Метод, я использую Meteor HTTP.call:

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

как написано в документации Метеора. Я могу получить содержание результата, HTML. Однако после печати возвращенных заголовков я не вижу content-range атрибут, который я пытался установить.

Изменить: решение Акшат работает, но только для некоторых веб-сайтов, на самом деле очень мало. Любая помощь приветствуется.

2 ответа

Решение

В общем, вы не можете иметь фиксированный лимит, если хотите всегда получать заголовок:

  1. Некоторые HTTP-серверы не поддерживают заголовок диапазона. Как узнать, поддерживает ли сервер заголовок диапазона?
  2. Вы не можете гарантировать, что байты X всегда будут содержать заголовок. Например, это может появиться после 1000 байтов.

В общем, я бы взял весь HTML-файл. На большинстве приличных серверов это должно занять менее 100 мс. Вряд ли заметен человеком. Если вы делаете это много, вы можете разрешить параллельное выполнение метода на стороне сервера (см. http://docs.meteor.com/)

Если необходима оптимизация, вы можете использовать предыдущий метод, получить 100 байтов, но если вы не найдете </title> чем вы вернетесь к загрузке всего файла HTML.

Использовать range заголовок:

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

Ответ должен иметь content-range заголовок, если используемый сервер поддерживает диапазоны содержимого.

Конечно, для этого нужен хост, который поддерживает диапазоны запросов. Я пробовал приведенный выше код, и он работает на http://www.microsoft.com как url,

Грустно сказать, что вы ничего не можете сделать для веб-сайтов, которые его не поддерживают, кроме запроса всего документа.

Одна довольно странная альтернатива - вручную запрашивать веб-страницу как сокет и отключать ее, когда вы получаете больше байтов, чем вам нужно.

Другие вопросы по тегам