Fehlermeldung
received corrupt message of type InvalidContentType
reqwest zeigt die Meldung am Ende von „error sending request for url (…): client error (Connect): received corrupt message of type InvalidContentType“, ureq als „io: received corrupt message of type InvalidContentType“. Clients auf Basis von OpenSSL melden dieselbe Situation als „wrong version number“.
rustls (via reqwest, ureq, tonic) — rustls::Error::InvalidMessage(InvalidContentType): the peer's reply is not TLS
Was der Fehler bedeutet
rustls hat das erste Byte der Antwort des Servers als Content Type eines TLS-Records gelesen und einen Wert gefunden, den kein TLS-Record haben kann. Die Gegenstelle spricht kein TLS: typischerweise ein HTTP-Server, der auf einem per https:// angesprochenen Port mit „HTTP/1.1 …“ antwortet, ein gRPC-Server, der im Klartext kommuniziert, oder ein Proxy, der reines HTTP erwartet.
Warum der Fehler auftritt
https:// auf einen Port mit reinem HTTP
häufigLokale Entwicklungsserver, Sidecars oder interne Ports ohne TLS.
Ein Proxy ohne TLS, der per TLS angesprochen wird
gelegentlichHTTPS_PROXY mit einer https://-URL für einen Proxy, der mit Clients nur reines HTTP spricht.
Ein gRPC-Client mit TLS gegen einen Klartext-Server
gelegentlichChannels von tonic, die aus https://-Endpunkten (oder mit TLS-Konfiguration) erzeugt wurden, gegen Server, die ohne TLS gestartet wurden.
So behebst du den Fehler
- 1.
Herausfinden, was der Port spricht
Antwortet reines HTTP, verwende http:// oder den TLS-Port des Servers.
bash curl -si http://127.0.0.1:8080/ | head -1 # plain HTTP answers -> use http:// or the TLS port - 2.
Schema des Endpunkts an den Server anpassen
Verwende http://-Endpunkte für Klartext-gRPC-Server in vertrauenswürdigen Netzwerken und andernfalls https:// mit TLS-Konfiguration.
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?;