为什么我在向 HTTPS 服务器发出 POST 请求时收到 WRONG_VERSION_NUMBER?

Luc*_*res 9 ssl flutter

我的应用程序向服务器发出大量 HTTP 请求。在其上安装 SSL 证书后,该应用程序崩溃了。

我的服务器正在运行带有 Nginx 托管 PHP 代码(使用证书和工作)的 Ubuntu,并“代理”用 NodeJS 编写的应用程序服务器代码。它一直在工作,直到我更改为 HTTPS。

我的 POST 请求典型用法:

var jsonRequest = //Some JSON.
Map<String, String> headers = {'Content-type': 'application/json'};
var response = await http.post(urls['auth'], body: jsonRequest,headers: headers);
Run Code Online (Sandbox Code Playgroud)

我得到的错误:

E/flutter (25875): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: HandshakeException: Handshake error in client (OS Error: 
E/flutter (25875):      WRONG_VERSION_NUMBER(tls_record.cc:242))

E/flutter (25875): #0      IOClient.send (package:http/src/io_client.dart:33:23)
E/flutter (25875): <asynchronous suspension>
E/flutter (25875): #1      BaseClient._sendUnstreamed (package:http/src/base_client.dart:169:38)
E/flutter (25875): <asynchronous suspension>
E/flutter (25875): #2      BaseClient.post (package:http/src/base_client.dart:54:7)
E/flutter (25875): #3      post.<anonymous closure> (package:http/http.dart:70:16)

...
Run Code Online (Sandbox Code Playgroud)

Sis*_*sir 11

正如@Patrick 在评论中提到的,这是 TLS 不匹配的结果。

一般经验法则:如果服务器 (API) 基于https(TLS),则客户端应使用https. 如果服务器使用http(非 TLS),那么客户端应该使用http它来连接它。

在您的情况下,您尝试使用的 API 似乎是一种http类型,因此您应该使用 flutter 应用程序:

Uri.http(baseUrl, endPointUrl)
Run Code Online (Sandbox Code Playgroud)


Ali*_*der 2

我认为您正在使用 https:// 但尚未安装 SSL 证书。所以尝试使用http://而不是https://。这对我来说有效。希望也能在您身边工作。