OpenAI 和 Anthropic 的 API 之所以没有设置 CORS(跨域资源共享),是因为它们并不打算让浏览器直接调用这些 API,而是明确设计为“后端到后端”的服务。
Access-Control-Allow-Origin
头来允许跨域。// 浏览器里直接调用,会报错:CORS blocked
fetch('https://api.openai.com/v1/chat/completions', {
method: 'POST',
headers: {
'Authorization': 'Bearer sk-xxx', // 暴露密钥!
'Content-Type': 'application/json'
},
body: JSON.stringify({ model: 'gpt-3.5-turbo', messages: [...] })
});
// 前端调用你自己的后端
fetch('/api/openai', {
method: 'POST',
body: JSON.stringify({ messages: [...] })
});
// 后端(如 Next.js API route)安全地调用 OpenAI
const response = await fetch('https://api.openai.com/v1/chat/completions', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.OPENAI_API_KEY}`, // 安全
'Content-Type': 'application/json'
},
body: JSON.stringify({ model: 'gpt-3.5-turbo', messages: [...] })
});
OpenAI 和 Anthropic 的 API 没有设置 CORS,是为了防止你把密钥暴露在浏览器里。你必须通过后端代理来安全地调用它们。
如果你在做前端项目,可以用 Next.js、Nuxt、Express 等框架搭一个中间层,既安全又合规。