Я уже довольно давно сталкиваюсь с проблемой, которая, похоже, ещё не была зафиксирована. Извините за сложность ситуации с множеством задействованных компонентов, но я постараюсь описать её кратко.
Суть в том, что при вставке ссылки в сообщение Ruby-гем, который в итоге выполняет HTTP GET-запрос к этому URL для получения данных встраивания, отправляет запрос, который некоторые HTTP-прокси считают недействительным согласно спецификации. Это в некоторых случаях препятствует работе предпросмотра:
Более подробное описание: мы используем отличный сервис Gitbook.io для нашей документации. Gitbook — это хостинговое решение, и они используют Cloudflare Workers для внутренних перенаправлений на своём сайте. Часть работы этих Cloudflare Workers связана с использованием Node Fetch API для проксирования HTTP-запросов. Разработчики Node Fetch очень педантичны в соблюдении спецификации и отклоняют любой GET-запрос, содержащий тело HTTP или даже заголовок Content-Length, даже если этот заголовок установлен в 0.
Именно это и происходит. Ruby-гем, выполняющий HTTP-запрос, отправляет заголовок:
Content-Length: 0
Это вызывает сильное недовольство у прокси на базе Node Fetch, и в результате запрос отклоняется удалённым сервером. На различных форумах ведутся долгие споры о том, является ли тело запроса в GET или просто наличие заголовка Content-Length допустимым согласно спецификации HTTP. У меня лично нет возражений против этого, но это не остановило разработчиков Node Fetch от закрытия всех созданных ими тем, в которых просили разрешить такую семантику.
К сожалению, я оказался в центре этого конфликта:
- Проект Node Fetch отказывается признавать такие HTTP-запросы валидными.
- Поддержка Cloudflare отказывается мне помогать, поскольку я не контролирую указанные Node-based Workers.
- Поддержка Gitbook отказывается помогать, так как они согласны с разработчиками Fetch (и, возможно, им просто всё равно).
- Библиотека HTTPrb отказывается удалять этот заголовок, поскольку считает его полностью корректным.
Поэтому я обращаюсь сюда с вопросом: существует ли возможность контролировать или изменять HTTP GET-запросы, используемые для предпросмотра ссылок, так, чтобы они включали допустимый набор заголовков, и прокси, использующие крайне педантичные библиотеки вроде Node Fetch, не отклоняли бы эти запросы?
Если хотите попробовать, вот пример URL, размещённый на серверах Gitbook и использующий их Cloudflare Worker на базе Node Fetch:



