Как я могу получить метод 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 ответа
В общем, вы не можете иметь фиксированный лимит, если хотите всегда получать заголовок:
- Некоторые HTTP-серверы не поддерживают заголовок диапазона. Как узнать, поддерживает ли сервер заголовок диапазона?
- Вы не можете гарантировать, что байты 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
,
Грустно сказать, что вы ничего не можете сделать для веб-сайтов, которые его не поддерживают, кроме запроса всего документа.
Одна довольно странная альтернатива - вручную запрашивать веб-страницу как сокет и отключать ее, когда вы получаете больше байтов, чем вам нужно.