如何修复HttpException:在收到完整的标头之前,连接已关闭

时间:2019-04-27 10:24:53

标签: http flutter

我最近在我的应用程序中升级了我的flutter版本。但是,当我想调试应用程序时,它显示了以下错误。

连接到服务协议时出错:HttpException:在接收到完整标头之前,连接已关闭,uri = {http://127.0.0.1:50795/ws

升级Flutter版本后,是否有人面临相同的问题?如果有任何解决方法,请分享。

14 个答案:

答案 0 :(得分:5)

问题主要出在Android Q上。

您可以将Android版本从Android Q降级为Android Pie

最终可以解决问题。

答案 1 :(得分:4)

现在此问题在github上打开 https://github.com/flutter/flutter/issues/32587

暂时可以通过切换到物理设备而不是仿真器来解决此问题 How to test android apps in a real device with Android Studio?

在github上找到决定(向上链接)

  

我有一个临时的解决方法,我现在可以使用。当我将模拟器作为Pixel 3 Android 9. + Target(Q API)运行模拟器时,会抛出上述异常。我制作了第二个模拟设备,即Pixel 2 Android 9.0 Target(28个API),并且此目标可以正常工作。

     

我还注意到,Pixel 2目标在磁盘上占用8.5GB,而Pixel 3目标仅占用1.4GB。这让我想知道Pixel 3目标是否缺少一些重要的东西。

答案 2 :(得分:1)

我遇到了同样的问题。实际上问题出在本机代码中。

如果您从Android Studio中打开your_app/android project并运行它,则可以跟踪android的问题,对于iOS,也是如此->在XCode中打开ios项目 因此,在我修复它之后,应用程序将按预期运行

我希望这会有所帮助

答案 3 :(得分:0)

首先关闭您的WiFi /蓝牙。

并运行以下命令:

flutter clean

然后退出或重新启动模拟器。

答案 4 :(得分:0)

没有解决方案,除非Flutter员工对其进行修复。

即使连接物理iOS设备,我也可以在一台计算机(Mac OS Mojave)上安装它。当然,在仿真的Android设备上(无论是哪一种),也会发生这种情况。

我也在具有物理Android设备(版本非常旧的Android版本:5.1)的另一台计算机(也是MacOS Mojave)中遇到此问题。

flutter clean完全不能解决我的情况。

答案 5 :(得分:0)

如果您在iOS版本上遇到此问题,请按照以下步骤操作

  

转到 Runner -> editSchema -> 运行->将构建配置更改为   调试

如果您处于发布模式,则在android studio上运行时会遇到此问题。

答案 6 :(得分:0)

我找到了解决方案/解决方法。对我来说,它只能在物理设备上运行,而不能在模拟器上运行。简单的解决方法是使用x86环境的仿真器,而不是x86_64仿真器。

答案 7 :(得分:0)

我通过设置request.persistentConnection = false来解决此问题。 (默认为true)

在有人遇到相同问题的情况下写这个……

答案 8 :(得分:0)

像维塔利(Vitaly)说..

在通过iOS的Xcode进行构建时,我也正努力地强制执行此错误,我想对于具有Android Studio的Android也是如此。

对于iOS,请执行flutter build ios --release,然后在Xcode中打开/运行项目

对于Android,请执行flutter build apk --release,然后在Android Studio中打开/运行项目

在通过flutter进行调试时,这似乎是一个问题...如果发现其他问题,我将更新此答案,但使用此方法似乎很稳定

答案 9 :(得分:0)

我弄清楚了如何限制NetworkImage的基础HttpClient上的连接!

我全局覆盖了HttpClient :(参考:Override HttpClient globally

class MyHttpOverrides extends HttpOverrides {
  @override
  HttpClient createHttpClient(SecurityContext context) {
    return super.createHttpClient(context)
        ..maxConnectionsPerHost = 5;
  }
}


void main() {
  HttpOverrides.global = MyHttpOverrides();
  runApp(MyApp());
}

Ref:Connection closed...

答案 10 :(得分:0)

在将Flutter与http软件包一起使用时,我遇到了相同的错误。

import 'package:http/http.dart' as http;
...
http.Response response =  http.get('url')

很好。但是当我去获取response.statusCode时,它出现了Error connecting错误。

我发现我在PC上使用SSR / v2Ray。我通过在Android Emulator扩展控件面板上设置代理来解决此问题。

答案 11 :(得分:0)

在我的情况下(错误“HttpException: Connection closed before full header was received”)调用是使用 Microsoft Internet Information Services 作为后端的 https 地址,在 IIS 网站的 SSL 设置中,我错误地设置了“客户端证书:接受”而不是“客户端证书:忽略”,设置“忽略”解决了问题。

答案 12 :(得分:0)

I was getting the same issue in POST request while sending the Images as multipart
Resolved by using 
contentType: MediaType('image', 'jpeg') in the http.MultipartFile function 
e.g 
    request.files.add(
          http.MultipartFile(
            'image',
            stream,
            length,
            filename: basename(_image1.path),
            contentType: MediaType('image', 'jpeg'),
          ),
        );
where 'image' is the paramter name.
 
Don't forget to import 'package:http_parser/http_parser.dart';
for MediaType.
 
Other Mediatype which you can use are 
"image/png"
"image/jpg" 
"image/jpeg"
And I am sending this too in Header "Content-Type": "multipart/form-data"

答案 13 :(得分:0)

这是我的问题,这对我有用:

问题
应用程序会突然崩溃

原因
我正在使用 cached_network_image,当用户上传超过 2MB 的重照片时,缓存耗尽内存然后应用程序崩溃。没有警告。

解决方案
使用 FadeInImage.memoryNetwork() 或其他类似 NetworkImage() 但不使用 cache_network_image,它仅适用于小于 2 MB 的照片
谢谢:)