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

基于Yew的Wasm Rust应用调用Notion API遇401认证错误

Yew(Wasm)中reqwest请求Notion API返回401的解决办法

你的问题核心出在fetch_mode_no_cors()上——浏览器在no-cors模式下会主动过滤掉Bearer Token这类非简单请求头,这就导致Notion API收不到你的认证信息,返回401。而Postman、curl是客户端工具,不受浏览器同源策略和no-cors的限制,所以请求能正常通过。

为什么移除fetch_mode_no_cors()后请求发不出?

因为你的Wasm应用运行在浏览器里,Notion API的域名和你的应用域名不同,触发了浏览器的同源策略,直接跨域请求会被拦截。

解决思路:用反向代理绕过跨域(推荐)

通过反向代理让你的应用请求自己的域名,再由代理转发到Notion API,这样就不存在跨域问题,无需no-cors模式,认证头也能完整传递。

1. 配置反向代理(以Yew常用的Trunk为例)

在项目根目录的trunk.toml中添加代理规则:

[[proxy]]
from = "/api/notion"
to = "https://api.notion.com/v1/databases/你的数据库ID/query"

替换to中的URL为你的实际Notion数据库查询接口地址。

2. 修改reqwest请求代码

去掉fetch_mode_no_cors(),请求代理后的本地路径:

let client = reqwest::Client::new();
let request = client
    .get("/api/notion")
    .bearer_auth(NOTION_TOKEN)
    .header("Notion-Version", NOTION_VERSION)
    .build()
    .unwrap();

let response = client.execute(request).await.unwrap();

其他验证点

  • 确保代理配置正确,启动Trunk后,访问http://localhost:8080/api/notion应能收到Notion的正常响应。
  • 检查浏览器开发者工具的Network面板,确认请求头中包含Authorization: Bearer xxx和Notion-Version。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 23:01:23