Перейти к содержимому
ecdsa.com
rustls (via reqwest, ureq, tonic)Rust

Сообщение об ошибке

received corrupt message of type InvalidContentType

reqwest показывает эту ошибку в конце строки «error sending request for url (…): client error (Connect): received corrupt message of type InvalidContentType», ureq — как «io: received corrupt message of type InvalidContentType». Клиенты на основе OpenSSL выдают в той же ситуации «wrong version number».

rustls (via reqwest, ureq, tonic) — rustls::Error::InvalidMessage(InvalidContentType): the peer's reply is not TLS

Что это означает

rustls прочитал первый байт ответа сервера как тип содержимого записи TLS и нашёл значение, которого не может быть ни у одной записи TLS. Другая сторона не использует TLS: обычно это HTTP-сервер, который отвечает «HTTP/1.1 …» на порту, куда обратились по https://, gRPC-сервер без шифрования или прокси, ожидающий обычный HTTP.

Почему это происходит

Как исправить

  1. 1.

    Выясните, по какому протоколу работает порт

    Если отвечает обычный HTTP, используйте http:// или TLS-порт сервера.

    bash
    curl -si http://127.0.0.1:8080/ | head -1      # plain HTTP answers -> use http:// or the TLS port
  2. 2.

    Приведите схему эндпоинта в соответствие с сервером

    Используйте эндпоинты http:// для gRPC-серверов без шифрования в доверенных сетях, а в остальных случаях — https:// с конфигурацией TLS.

    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?;

Связанные ошибки

Открыть всю базу ошибок подписей