是否有标准方法来处理跨浏览器的网络错误和阻止的请求?

问题描述 投票:0回答:1

根据 fetch 规范 https://fetch.spec.whatwg.org/#concept-network-error 网络错误响应应具有状态 0。但是对于这些错误情况,我们看到 fetch API 的浏览器实现会抛出一般错误。当我在任何主要浏览器的浏览器开发工具中阻止请求时,我都会收到 fetch 抛出的错误。不同浏览器的错误消息有所不同。

令我惊讶的是,这种行为并不标准化。这对于我们团队的遥测和警报来说是一个大问题。当我们的值班人员发出警报时,我们希望从服务器错误中过滤掉“网络错误”。我们对浏览器中抛出的不同错误消息集进行了字符串匹配。到目前为止我们已经:

const NETWORK_OR_FIREWALL_ERROR_MESSAGES = [
  'TypeError: Failed to fetch', // Chrome
  'Failed to fetch', // Chrome, Edge
  'NetworkError when attempting to fetch resource.', // Firefox
  'Load failed', // iOS Safari,
];

我确信它并不全面 - 我们必须在我们的待命工程师被寻呼然后通过日志进行 grep 时逐步添加此内容。

是否有更好的方法来过滤网络错误,或者诉诸 Error.message 上的字符串匹配是我们最好的选择?难道这不应该标准化吗,这样跨浏览器的 fetch API 就会抛出某种错误类型/消息,或者有充分的理由不能这样做吗?

javascript browser cross-browser fetch-api
1个回答
0
投票

根据 fetch 规范 https://fetch.spec.whatwg.org/#concept-network-error 网络错误响应应具有状态 0。但是对于这些错误情况,我们看到 fetch API 的浏览器实现会抛出一般错误。

您误解了那里的规范。当它从获取算法中“返回网络错误”时,

fetch
方法将抛出错误。这在 https://fetch.spec.whatwg.org/#dom-global-fetch 中进行了说明,“如果
response
是网络错误,则使用
p
拒绝
TypeError
并中止这些步骤
”。

© www.soinside.com 2019 - 2024. All rights reserved.