Message d’erreur
received corrupt message of type InvalidContentType
reqwest l’affiche à la fin de « error sending request for url (…): client error (Connect): received corrupt message of type InvalidContentType », ureq sous la forme « io: received corrupt message of type InvalidContentType ». Les clients fondés sur OpenSSL signalent la même situation par « wrong version number ».
rustls (via reqwest, ureq, tonic) — rustls::Error::InvalidMessage(InvalidContentType): the peer's reply is not TLS
Ce que cela signifie
rustls a lu le premier octet de la réponse du serveur comme le type de contenu d’un enregistrement TLS et y a trouvé une valeur qu’aucun enregistrement TLS ne peut avoir. L’autre partie ne parle pas TLS : il s’agit typiquement d’un serveur HTTP qui répond « HTTP/1.1 … » sur un port atteint avec https://, d’un serveur gRPC en clair ou d’un proxy qui attend du HTTP en clair.
Pourquoi cela se produit
https:// vers un port HTTP en clair
fréquenteServeurs de développement locaux, sidecars ou ports internes sans TLS.
Un proxy en clair atteint en TLS
occasionnelleHTTPS_PROXY défini sur une URL https:// pour un proxy qui ne parle que HTTP en clair avec les clients.
Un client gRPC en TLS face à un serveur en clair
occasionnelleDes canaux tonic créés à partir de points de terminaison https:// (ou avec une configuration TLS) face à des serveurs démarrés sans TLS.
Comment corriger l’erreur
- 1.
Déterminer quel protocole parle le port
Si c’est du HTTP en clair qui répond, utilisez http:// ou le port TLS du serveur.
bash curl -si http://127.0.0.1:8080/ | head -1 # plain HTTP answers -> use http:// or the TLS port - 2.
Adapter le schéma du point de terminaison au serveur
Utilisez des points de terminaison http:// pour les serveurs gRPC en clair sur des réseaux de confiance, et https:// avec une configuration TLS dans les autres cas.
rust // tonic: use an http:// endpoint for plaintext servers, https:// + TLS config for TLS servers let channel = tonic::transport::Channel::from_static("http://127.0.0.1:50051").connect().await?;