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

Chrome扩展请求SvelteKit端点时出现CORS预检错误求助

解决SvelteKit端点与Chrome扩展Manifest V3的CORS预检错误

问题核心在于携带Authorization头的请求会触发OPTIONS预检请求,而你的SvelteKit端点未对该请求返回正确的CORS响应,导致浏览器拦截后续请求。以下是具体解决步骤:

1. 针对端点单独处理OPTIONS预检请求

在你的api/user/+server.js(对应端点文件)中添加OPTIONS方法的处理逻辑,返回包含所有必要CORS头的响应:

// 处理预检OPTIONS请求
export async function OPTIONS() {
  const headers = new Headers();
  // 指定允许的扩展Origin
  headers.set('Access-Control-Allow-Origin', 'chrome-extension://abcdefg');
  // 允许后续实际请求的方法
  headers.set('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
  // 允许请求携带的自定义头(必须包含Authorization)
  headers.set('Access-Control-Allow-Headers', 'Authorization, Content-Type');
  
  return new Response(null, { headers });
}

// 原有的GET/POST业务逻辑
export async function GET({ request }) {
  // 你的业务处理代码...
  const user = { /* 返回的用户数据 */ };
  
  const res = new Response(JSON.stringify({ user }));
  res.headers.set('Access-Control-Allow-Origin', 'chrome-extension://abcdefg');
  return res;
}

2. 全局统一处理CORS(多端点场景推荐)

如果多个API端点都需要处理CORS,可通过SvelteKit的hooks.server.js全局拦截请求,避免重复代码:

// src/hooks.server.js
export async function handle({ event, resolve }) {
  // 拦截OPTIONS预检请求
  if (event.request.method === 'OPTIONS') {
    return new Response(null, {
      headers: {
        'Access-Control-Allow-Origin': 'chrome-extension://abcdefg',
        'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',
        'Access-Control-Allow-Headers': 'Authorization, Content-Type',
      }
    });
  }

  // 处理其他请求,统一添加CORS头
  const response = await resolve(event);
  response.headers.set('Access-Control-Allow-Origin', 'chrome-extension://abcdefg');
  return response;
}

3. 验证配置是否生效

用curl手动发送预检请求,检查响应头是否符合预期:

curl -X OPTIONS http://localhost:8000/api/user \
  -H "Origin: chrome-extension://abcdefg" \
  -H "Access-Control-Request-Method: GET" \
  -H "Access-Control-Request-Headers: Authorization" \
  -v

若响应头中包含Access-Control-Allow-Origin等指定字段,说明配置生效。

关键注意事项

  • 不能用*作为Access-Control-Allow-Origin值(携带Authorization头时,浏览器会拒绝通配符),必须明确指定你的扩展Origin。
  • 无需修改Chrome扩展的Manifest配置(你已正确设置host_permissions),CORS问题的核心在服务器端的预检请求处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 03:10:43