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

如何在Tauri中为所有请求统一设置请求头?

在Tauri中实现全局请求头统一设置的方案

在Tauri里可以通过两种方式实现类似Electron的全局请求头配置,不用每次手动给请求加token:

方案一:前端请求库封装拦截(适合前端可控场景)

如果你继续使用superagent,不用每次重复设置请求头,可以封装一个全局实例,通过拦截器统一处理:

import superagent from 'superagent';
import { get } from '@tauri-apps/plugin-store'; // 用Tauri的store存登录信息

// 创建全局复用的superagent实例
const apiClient = superagent.agent();

// 添加全局请求拦截逻辑
apiClient.use(async (req) => {
  // 设置统一的User-Agent
  req.set('User-Agent', `userAgent ${import.meta.env.VITE_APP_VERSION}`);
  
  // 针对特定服务添加Authorization头
  try {
    const serverUrl = await get('login.server');
    const accessToken = await get('login.access_token');
    if (serverUrl && accessToken && req.url.startsWith(serverUrl)) {
      req.set('Authorization', `Bearer ${accessToken}`);
    }
  } catch (err) {
    // 忽略错误
  }
  return req;
});

// 后续所有接口请求都用这个apiClient
// 示例:apiClient.get('/api/user').then(res => { ... })

方案二:Tauri核心层HTTP中间件(全局拦截,更接近Electron的实现)

这种方式是在Rust后端设置全局中间件,所有通过Tauri发起的请求都会被拦截处理,和Electron的session.webRequest逻辑一致:

1. 先在src-tauri/Cargo.toml添加依赖

[dependencies]
tauri = { version = "1.5", features = ["http-middleware"] }
tauri-plugin-store = "1.2"

2. 修改src-tauri/src/main.rs代码

use tauri::{http::Request, http::Response, middleware::Next, Runtime};
use tauri_plugin_store::StoreBuilder;

// 定义全局请求中间件
fn request_middleware<R: Runtime>(req: Request, next: Next<'_, R>) -> Response {
    let mut req = req;
    
    // 设置统一的User-Agent
    req.headers_mut().insert(
        "User-Agent",
        format!("userAgent {}", env!("CARGO_PKG_VERSION")).parse().unwrap(),
    );
    
    // 从Tauri Store获取登录信息
    let app_handle = req.app_handle();
    let store = StoreBuilder::new(app_handle, "login.json").build().unwrap();
    let server_url: Option<String> = store.get("login.server").unwrap();
    let access_token: Option<String> = store.get("login.access_token").unwrap();
    
    // 仅针对目标服务添加Authorization头
    if let (Some(server), Some(token)) = (server_url, access_token) {
        if req.uri().to_string().starts_with(&server) && !token.is_empty() {
            req.headers_mut().insert(
                "Authorization",
                format!("Bearer {}", token).parse().unwrap(),
            );
        }
    }
    
    next.run(req)
}

fn main() {
    tauri::Builder::default()
        .plugin(tauri_plugin_store::Builder::default().build())
        .setup(|app| {
            // 注册全局HTTP中间件
            app.middleware(|middleware| middleware.add(request_middleware));
            Ok(())
        })
        .run(tauri::generate_context!())
        .expect("failed to run Tauri app");
}

这个方案不管前端用superagent、fetch还是其他请求方式,只要请求走Tauri的网络栈,都会自动带上对应的请求头。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 13:52:38