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 浏览器和模拟器中随机失败的主要内容,如果未能解决你的问题,请参考以下文章
怎么从零编写一个 v3 版本的 chrome 浏览器插件实现 CSDN 博客网站的暗黑和明亮主题切换?
怎么从零编写一个 v3 版本的 chrome 浏览器插件实现 CSDN 博客网站的暗黑和明亮主题切换?