Провал одностраничного вывода CNN

На другом форуме Discourse @sam предложил мне создать отчет об ошибке здесь: Похоже, что (по крайней мере) периодически возникает сбой при однобоксинге статей CNN. Поскольку это сайт с высоким уровнем известности, это кажется довольно значимым. Неясно, является ли это проблемой ограничения частоты запросов, блокировкой user-agent, проблемой на стороне Discourse, реальной проблемой с данными oEmbed или чем-то другим.

Примеры:

(Дополнительные примеры удалены из-за статуса нового пользователя.)

4 лайка

Привет @wazroth :wave: добро пожаловать в Meta. :slight_smile: Спасибо за отчет.

Да, мне удалось воспроизвести это на моем локальном окружении для разработки и на размещенном сайте. Ссылки на CNN вообще не отображаются в виде карточек.

3 лайка

Спасибо, @wazroth. Мы запланировали отладку этого на один из дней в ближайшие 4 недели.

4 лайка

@ted, не помнишь ли ты, почему мы снизили max_download_kb для onebox с 10 МБ до 2 МБ в SECURITY: Prevent Onebox cache overflow by limiting downloads and URL… · discourse/discourse@95a82d6 · GitHub?

Сообщённые ссылки на CNN не обрабатываются как onebox, потому что размер ответа составляет 2,7 МБ, что превышает текущий лимит в 2 МБ. Мы можем исправить это, увеличив размер по умолчанию, но я хотел бы лучше понять риски такого изменения.

4 лайка

хм, так… продолжая, разве вся нужная нам информация не содержится в первых 2 МБ?

2 лайка

См. также Amazon Onebox broken, возможно, это связано?

Эта настройка max_download_kb прописана в коде? Я не могу изменить её через меню администратора, верно?

Зависит от движка onebox. Некоторые движки, например Amazon, извлекают определённую информацию, такую как цена товара, непосредственно из содержимого тега <body>. Для движков, использующих Open Graph, теоретически достаточно только определённых тегов, например <meta>, расположенных в <head>.

Наиболее эффективным способом будет парсинг ответа на лету по мере его поступления, однако переделка всех наших движков под такой подход потребует значительных усилий и является гораздо более сложным решением.

На самом деле, Nokogiri, который мы используем для парсинга HTML-ответов, способен обрабатывать неполный HTML-текст, поэтому нет необходимости отбрасывать весь ответ, если он слишком велик. Я считаю, что мы можем просто продолжать ограничивать размер тела ответа до 2 МБ, и если размер ответа превышает это значение, мы будем пытаться пропарсить только первые 2 МБ.

1 лайк

Это исправлено в

Локально «проблемные» URL-адреса, о которых сообщалось в этой теме, больше не вызывают ошибку при попытке onebox.

5 лайков

Отлично, спасибо @tgxworld :smiley:

2 лайка