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

如何使用授权令牌对Fetch请求进行授权?调用Freesound API时Fetch返回未授权错误但Postman可正常运行

解决Fetch请求调用Freesound API的授权问题

我一眼就看到你的代码里有两个关键问题导致了授权失败,咱们一步步来解决:

1. 错误的mode: "no-cors"设置

当你把请求模式设为"no-cors"时,浏览器会强制限制请求行为:

  • 自定义请求头(比如你的Authorization令牌)会被浏览器直接忽略,根本不会发送到服务器
  • 你无法读取响应内容(比如调用response.json()),因为响应会变成"opaque"类型,完全不可访问

Postman能正常工作是因为它不受浏览器的CORS规则约束,所以可以正常发送授权头并读取响应。

2. 请求配置结构不规范

你把method放在了headers对象里面,虽然GET是Fetch的默认请求方法,这个错误不会直接导致授权失败,但这是不规范的写法,容易引发其他问题。


修正后的代码

const BASE_URL = "https://freesound.org/apiv2/sounds/"; 
const rain = "58835"; 
const APIKEY = "foo"; 

fetch(BASE_URL + rain, { 
  method: "GET", 
  headers: { 
    'Authorization': `Token ${APIKEY}`, 
  },
  // 去掉mode: "no-cors",使用默认的"cors"模式
}) 
.then((response) => {
  // 先检查响应状态,确认授权是否成功
  if (!response.ok) {
    throw new Error(`HTTP error! Status: ${response.status}`);
  }
  return response.json();
})
.then((json) => console.log(json)) 
.catch((err) => console.log(err));

额外注意事项

  • 确保Freesound API允许从你的域名发起CORS请求。如果还是遇到CORS错误,可能需要检查Freesound API文档,确认是否需要在控制台配置允许的域名,或者考虑用后端代理转发请求(后端服务器不受浏览器CORS限制)。
  • 绝对不要把API密钥直接写在前端代码里!这会导致密钥泄露,任何人都能拿到你的密钥滥用API。正确做法是把密钥放在后端,前端通过调用自己的后端接口间接访问Freesound API。

内容的提问来源于stack exchange,提问作者Eyup Ucmaz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 03:42:29