Je lutte contre un problème depuis un certain temps qui ne semble pas encore avoir été signalé. Je m’excuse pour le nombre inhabituel d’éléments en jeu, mais je vais essayer de le décrire succinctement.
En bref (TL;DR) : lorsque je colle un lien dans un message, le gem Ruby qui effectue finalement la requête HTTP GET vers cette URL pour récupérer les données d’intégration envoie une requête HTTP considérée par certains proxys comme non conforme à la spécification. Cela empêche les aperçus de fonctionner dans certains cas :
La version un peu plus longue est la suivante. Nous utilisons un petit service pratique appelé Gitbook.io pour notre documentation. Gitbook est une solution hébergée qui utilise des workers Cloudflare pour les redirections internes sur leur site. Une partie de ces workers Cloudflare consiste à utiliser l’API Node Fetch pour faire office de proxy pour les requêtes HTTP. Les développeurs de Node Fetch sont TRÈS pointilleux sur le respect de la spécification et ils rejettent toute requête GET qui contient un corps HTTP ou même un en-tête Content-Length, même si cet en-tête est défini sur 0.
Et c’est exactement ce qui se produit. Le gem Ruby qui effectue la requête HTTP envoie un en-tête de requête :
Content-Length: 0
ce qui exaspère le proxy Node Fetch et entraîne le rejet de la requête par le serveur distant. De nombreux débats ont eu lieu sur différents forums pour savoir si un corps de requête sur une requête GET, ou même simplement un en-tête Content-Length, est valide selon la spécification HTTP. Cela ne me pose pas de problème, mais cela n’a pas empêché les développeurs de Node Fetch de fermer toutes les issues ouvertes pour les supplier d’autoriser une telle sémantique.
Je suis malheureusement coincé au milieu de tout cela.
- Le projet Node Fetch refuse de considérer ces requêtes HTTP comme valides.
- Le support de Cloudflare refuse de m’aider car je n’ai pas le contrôle sur les workers basés sur Node en question.
- Le support de Gitbook refuse de m’aider car ils sont d’accord avec les développeurs de Fetch (et je ne suis pas sûr qu’ils s’en soucient vraiment).
- Et la bibliothèque HTTPrb refuse de supprimer l’en-tête car ils estiment qu’il est parfaitement valide.
Il ne me reste donc qu’à poster ici pour demander s’il existe un moyen de contrôler ou de modifier les requêtes HTTP GET effectuées pour les aperçus de liens afin d’inclure un ensemble acceptable d’en-têtes HTTP, de sorte que les proxys utilisant des bibliothèques incroyablement pointilleuses comme Node Fetch ne rejettent pas ces requêtes ?
Si vous souhaitez essayer, voici une URL d’exemple hébergée sur les serveurs de Gitbook et utilisant leur worker Cloudflare propulsé par Node Fetch :



