HTTP-запросы angular6 возвращают isTrusted - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть приложение angular6, работающее на производстве, время от времени некоторые пользователи получают сообщение об ошибке во время http-запросов.

Http failure response for (unknown url): 0 Unknown Error response: {"isTrusted":true}

Это влияет на пользователей случайным образом, в шаблоне нетHTTP-метод, пользователь или что-либо еще, насколько я могу судить, я использую часовой для регистрации ошибок.

Я уже потратил много времени на поиск решения, так что почти все намекали на неправильные заголовки cors.Все запросы проходят через шлюз API, где установлены заголовки cors.

'Access-Control-Allow-Headers': 'Content-Type, x-internal-token, Origin, Accept, X-Requested-With, If-Modified-Since, Cache-Control, Keep-Alive'
'Access-Control-Allow-Origin': 'http://example.com'
'Access-Control-Allow-Methods': 'PUT, POST, GET, DELETE, PATCH, OPTIONS'
'Access-Control-Max-Age': 3600

До сих пор я не получил никаких ошибок при первой загрузке приложения и получает некоторую информацию только от шлюза API.позже, пока пользователь использует приложение.Еще более странно, что я также получил эту ошибку для ./assets/i18n/de.json (обычный запрос get), который не является cors, а просто статическим json для динамических переводов.

У меня совершенно нет идей, и любая помощь очень ценится.

РЕДАКТИРОВАТЬ: Пожалуйста, прочитайте внимательно;эта проблема существует только для некоторых пользователей и не всегда, это не общая неправильная конфигурация!

EDIT2: для дальнейшей отладки этой проблемы я настроил второй api-шлюз (тот же код), который был настроен для регистрациивсе запросы.Небольшое изменение было внесено в угловое приложение, чтобы оно выполняло один и тот же запрос дважды;один раз против реального api-шлюза и один раз против входящего api-шлюза (для некоторых вызовов api).В одном случае приложение смогло выполнить запрос к реальному шлюзу api, но не к шлюзу регистрации (тот же код, оба заголовка nginx, cors одинаковы).

EDIT3: шлюз журнала и реальныйapi-шлюз расположен на разных серверах (разных провайдерах), и я вижу запрос OPTIONS в журнале nginx со статусом 200.

EDIT4: я перенес обработку cors с api-gateway на nginx и т. д.пока я не получил больше ошибок.

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Похоже, проблема с конфигурацией Nginx.Следующие коды Nginx добавят ответы заголовков HTML Access-Control-Allow-Origin: *: общедоступные веб-статические файлы домена, чтобы другие домены могли без проблем получать доступ к этим веб-статическим файлам:

location / {
  location ~* ^.+\.(?:css|cur|json|js|jpeg|gif|htc|ico|png|txt|otf|ttf|eot|woff|svg|webp|webm|zip|gz|tar|rar)$ {
    # If request comes from allowed subdomain
    # (yourdomain.com) then we enable CORS
    # if ($http_origin ~* (https?://yourdomain\.com(:[0-9]+)?$)) {
    #  set $cors "1";
    # }

    set $cors "1";

    # OPTIONS indicates a CORS pre-flight request
    if ($request_method = 'OPTIONS') {
      set $cors "${cors}o";
    }

    # Append CORS headers to any request from 
    # allowed CORS domain, except OPTIONS
    if ($cors = "1") {
      more_set_headers 'Access-Control-Allow-Origin: $http_origin';
      more_set_headers 'Access-Control-Allow-Credentials: true';
    }

    # OPTIONS (pre-flight) request from allowed 
    # CORS domain. return response directly
    if ($cors = "1o") {
      more_set_headers 'Access-Control-Allow-Origin: $http_origin';
      more_set_headers 'Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE';
      more_set_headers 'Access-Control-Allow-Credentials: true';
      more_set_headers 'Access-Control-Allow-Headers: Origin,Content-Type,Accept';
      add_header Content-Length 0;
      add_header Content-Type text/plain;
      return 204;
    }
  }
}
0 голосов
/ 05 декабря 2018

Я думаю, это решит проблему.В файле json обновите свойство assets, добавив вместо 'string' 'массив'.

Это проблема с бета-версиями Angular CLI по сравнению со стабильными выпусками.

"apps": [
    {
      "root": "src",
      "outDir": "dist",
      "assets": "assets"
    }
]

 "apps": [
    {
      "root": "src",
      "outDir": "dist",
      "assets": [
        "assets"
      ]
    }
]
...