不久前我们推出了一个由GQL后端支持的React网站。从最近收集的客户端指标来看,我们观察到以下错误在84和85版本的Firefox浏览器中获取数据时发生的频率很高(截至发布此问题的时间)。
NetworkError when attempting to fetch resource.
在React应用程序中,使用一个Apollo GraphQL客户端来获取数据。整个ApolloError对象读起来像
{"graphQLErrors":[],"networkError":{},"message":"NetworkError when attempting to fetch resource."}
然而,当我们自己在上述浏览器版本上尝试时,无法复制。
我已经确认这应该不是CORS问题。我们有一个相当大的用户群,他们使用的Firefox浏览器版本也很多,但只有84和85版本的出现率如此之高。不久前,我们修复了一个类似的问题,该问题是由旧版本浏览器与Fetch api不兼容引起的。
我们有点不知道是什么原因导致了这个问题。客户端的日志记录数量有限,无法显示更多信息。任何见解或线索都非常感谢。
最后我发现这不是Firefox 84/85的错误。正如这里所解释的,fetch API只会在它的进程被浏览器终止时抛出一个网络错误消息(很可能是由于用户导航到另一个页面或停止页面加载造成的)。
我已经在一些主流浏览器上验证了这一点,当获取API正在进行时,故意停止页面加载。我收到的错误消息是:
- 铬,Edge -
Failed to fetch
- Firefox -
NetworkError when attempting to fetch resource
- Safari -
cancelled
不幸的是,只有Safari浏览器返回正确的消息来解释可能发生的事情。
我认为通常这些错误是安全的,可以忽略,或者在连接问题引起的情况下重试一次就可以挽救。对于Apollo GraphQL客户机,更重要的是检查ApolloError
对象的graphQLErrors
和networkError
属性,这表明客户机捕获了一些严重的问题。