You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript中获取失败fetch请求的响应头(React场景)

解决Fetch请求HTTP错误下无法获取响应头的问题

Fetch API的特性是:只有当请求发生网络故障(比如断网、域名解析失败)时才会抛出异常进入try-catch,像400、500这类HTTP错误状态码并不会触发catch逻辑。所以你之前无法获取失败响应的res对象,是因为没正确处理HTTP错误的情况。

要获取失败响应里的X-reason头,你需要先判断响应的ok属性(当状态码在200-299之间时ok为true),如果ok为false,直接从res.headers里提取目标字段即可。

修改后的代码示例:

useEffect(() => {
  async function fetchData() {
    try {
      const res = await fetch(
        "https://api-production.afghantell.com/apiv1/eligibilities",
      );
      
      // 处理HTTP错误(非2xx状态码)
      if (!res.ok) {
        const errorReason = res.headers.get('X-reason');
        console.log('请求错误原因:', errorReason);
        // 这里可以根据需要抛出错误或做其他处理
        throw new Error(errorReason || `请求失败,状态码:${res.status}`);
      }

      // 请求成功的逻辑
      console.log(res.status);
      console.log(res.headers);
    } catch (err) {
      // 处理网络错误或自定义抛出的错误
      console.error('请求异常:', err);
    }
  }
  fetchData();
}, []);

说明:

  • 先通过res.ok判断请求是否成功,非成功状态下直接读取响应头的X-reason。
  • try-catch用来捕获网络类异常,以及我们手动抛出的HTTP错误。
  • 如果需要,还可以调用res.json()或res.text()获取响应体内容,前提是服务器返回了对应格式的响应。

内容的提问来源于stack exchange,提问作者Hamed Siaban

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 18:33:30