Ionic V3 Запрос случайно завершается неудачей в браузере и эмуляторе Chrome - PullRequest
0 голосов
/ 23 декабря 2018

У меня странная проблема с Http-Requests, которая случайно завершается с приложением Ionic (V3), использующим Http-Client из Angular (7.1.1).Backend - это ASP.NET Core Web API с CORS, настроенным для разрешения любых заголовков, методов и происхождения.

Чтобы выяснить проблему, я переключился с эмулятора на браузер.После устранения некоторых проблем с CORS я заметил, что проблема с ошибочными запросами существует только в Chrome (FF и Edge работают нормально).HTTP-запросы завершаются с ошибкой: «ERR_INVALID_HTTP_RESPONSE», после щелчка назад и вперед вкладка сети выглядит следующим образом:

enter image description here

Я не могу объяснить, почему некоторыеУ запросов нет запроса Preflight, но эти запросы, похоже, всегда выполняются успешно (у них также есть заголовок den «Accept: application / json, text / plain, / », который должен всегда вызывать Options-Preflight,если я прав?)

Кроме того, все запросы, даже неудавшиеся, доходят до бэкэнда и успешно разрешаются на бэкенде.

Ошибка клиента в консоли:

{
    "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
    }
}

Чтение ионных форумов приводит к проблеме с CORS.Возможно, я что-то упустил, поэтому вот моя CORS-конфигурация из Backend:

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 Ответ

0 голосов
/ 13 января 2019

Если ваш проект веб-API находится в ядре aspnet 2.2, это может быть связано с этой проблемой: Ответ, который возвращает 204, завершается с ошибкой HTTP_1_1_REQUIRED / INVALID_HTTP_RESPONSE в процессе ANCM

Существуеттри варианта:

  • Понижение до aspnetcore 2.1
  • Обновление до 2.2.1 / 3.0.0 Предварительный просмотр
  • Используйте обходные пути, упомянутые в проблеме:

Добавьте следующее в первые строки вашего StartUp.cs Configure метода.

app.Use(async (ctx, next) =>
{
  await next();
  if (ctx.Response.StatusCode == 204)
  {
    ctx.Response.ContentLength = 0;
  }
});

Кроме того, при предпросмотре, который не запускается каждый раз, кеш браузера включает результаты вызовов preflight OPTIONS, поэтому вместо этогонеобходимость запуска предварительной проверки при каждом запросе запускается только после истечения срока действия кэша.

Наконец: настройка CORS с принятием любого источника может быть небезопасной, см .: Безопасность CORS: отражение любого источниказначение заголовка при настройке на * опасно

...