Ionic V3 请求在 Chrome 浏览器和模拟器中随机失败

Posted

技术标签:

【中文标题】Ionic V3 请求在 Chrome 浏览器和模拟器中随机失败【英文标题】:Ionic V3 Request randomly fail in Chrome Browser and Emulator 【发布时间】:2019-05-23 00:52:38 【问题描述】:

我有一个奇怪的问题,即使用 Angular (7.1.1) 的 Http-Client 的 Ionic(V3) 应用程序的 Http-Requests 随机失败。 后端是一个 ASP.NET Core Web API,其 CORS 配置为允许任何标头、方法和来源。

为了找出问题,我从模拟器切换到浏览器。在解决了一些 CORS 问题后,我注意到请求失败的问题只存在于 Chrome 中(FF 和 Edge 工作正常)。 HTTP 请求失败并显示:“ERR_INVALID_HTTP_RESPONSE”,来回单击后,网络选项卡如下所示:

我无法解释为什么有些请求没有 Preflight 请求,但这些请求似乎总是成功(它们还有 den 标头“Accept: application/json, text/plain, /”如果我是正确的,它应该总是触发选项-预检?)

每个请求,甚至是失败的请求,都会到达后端并在后端成功解决。

控制台中客户端的错误:


    "headers": 
        "normalizedNames": ,
        "lazyUpdate": null,
        "headers": 
    ,
    "status": 0,
    "statusText": "Unknown Error",
    "url": null,
    "ok": false,
    "name": "HttpErrorResponse",
    "message": "Http failure response for (unknown url): 0 Unknown Error",
    "error": 
        "isTrusted": true
    

阅读 Ionic 论坛会导致 CORS 问题。也许我忽略了一些东西,所以这是我从后端获取的 CORS 配置:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    
        if (env.IsDevelopment())
        
            app.UseCors(builder =>
            
                builder.WithOrigins("*")
                       .WithMethods("*")
                       .WithHeaders("*");
            );
            app.UseDeveloperExceptionPage();
        
        else
        
            app.UseHsts();
        

        app.UseHttpsRedirection();
        app.UseAuthentication();
        app.UseMvc();
    

非常感谢任何提示。

【问题讨论】:

【参考方案1】:

如果您的 Web API 项目在 aspnet core 2.2 上,那么它可能与此问题有关: Response that returns 204 fails with HTTP_1_1_REQUIRED/INVALID_HTTP_RESPONSE in ANCM In-process

共有三个选项:

降级到 aspnetcore 2.1 升级到 2.2.1 / 3.0.0 预览版 使用该问题中提到的解决方法:

将以下内容添加为 StartUp.cs 配置方法的第一行。

app.Use(async (ctx, next) =>

  await next();
  if (ctx.Response.StatusCode == 204)
  
    ctx.Response.ContentLength = 0;
  
);

关于预检并非每次都触发,浏览器缓存包括预检 OPTIONS 调用的结果,因此不必对每个请求触发预检,它仅在缓存过期时触发。

最后:使用任何来源的接受配置 CORS 可能是不安全的,请参阅:CORS security: reflecting any origin header value when configured to * is dangerous

【讨论】:

非常感谢,没想到 IIS/.NetCore 有问题。

以上是关于Ionic V3 请求在 Chrome 浏览器和模拟器中随机失败的主要内容,如果未能解决你的问题,请参考以下文章

在android设备上调试ionic应用

怎么从零编写一个 v3 版本的 chrome 浏览器插件实现 CSDN 博客网站的暗黑和明亮主题切换?

怎么从零编写一个 v3 版本的 chrome 浏览器插件实现 CSDN 博客网站的暗黑和明亮主题切换?

chrome浏览器安装react-devtools插件

在 Ionic2 v3.4 中读取 SQLite SELECT 查询的结果

Ionic v3 对齐按钮和图标