Angular6的HTTP请求返回的isTrusted是什么意思?

14

我有一个运行在生产环境的Angular6应用程序,偶尔会有一些用户在进行HTTP请求时出现错误。

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

这会随机地影响用户,就我所知,在用户使用的HTTP方法或其他方面上并没有模式,我使用Sentry记录错误。

我已经花了很多时间寻找解决方案,到目前为止几乎所有提示都指向了错误的跨域资源共享(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。

我已经完全无计可施了,请提供任何帮助,非常感谢。

编辑:请仔细阅读;这个问题只存在于某些用户身上,并不是普遍的配置错误!

编辑2:为了进一步调试这个问题,我设置了第二个API-Gateway(相同代码),该网关被配置为记录所有请求。对Angular应用程序进行了轻微修改,以便它执行相同的请求两次;一次针对真实的API-Gateway,一次针对记录日志的API-Gateway(对于某些API调用)。在某些情况下,应用程序能够向真实的API-Gateway发出请求,但无法向记录日志的网关发出请求(相同代码,都是Nginx,CORS标头相同)。

编辑3:记录网关和真实的API-Gateway位于不同的服务器上(不同的提供商),我可以在nginx日志中看到OPTIONS请求,状态为200。

编辑4:我已将CORS处理从API-Gateway移动到Nginx,到目前为止,我没有收到更多错误。


谢谢,我已经看过了,但是没有任何解决方案能够帮助我。 - redshark1802
问题中引用的错误信息与CORS无关。 - sideshowbarker
1
你尝试过关闭AdBlock吗? - Wojciech K
有没有办法验证一下遇到这个问题的用户是否被剥夺了他们的CORS头?根据公司网络设置,这可能解释了为什么只有一些用户会遇到这个问题。 - Maartenw
这个问题明显是后端引起的,请检查是否使用了类似nginx/apache的网关服务器配置。 - xkeshav
显示剩余6条评论
2个回答

1
似乎是Nginx配置问题。以下的Nginx代码将添加HTML头响应Access-Control-Allow-Origin: *:公共Web静态文件域,以便让其他域名访问这些Web静态文件而无需出现问题。
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

我认为这将解决问题。请在JSON文件中更新'assets'属性,将其包括在'数组'中而不是'字符串'。

这是Angular CLI beta版本与稳定版本之间的问题。

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

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

尝试使用以下内容:Access-Control-Allow-Headers: * Access-Control-Request-Headers: * Access-Control-Request-Method: GET而不是'Access-Control-Allow-Headers': 'Content-Type, x-internal-token, Origin, Accept, X-Requested-With, If-Modified-Since, Cache-Control, Keep-Alive'并且保留您上面编写的所有其他标头。 - dinesh mulchandani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接