核心价值明确允许源与方法,按需开启凭据并在预检中缓存协商结果以降低延迟。设置 `Vary` 避免缓存污染,确保针对不同源与请求头的响应一致性。允许源与方法export const runtime = 'edge' const ALLOW_ORIGINS = new Set(['https://app.example.com', 'https://admin.example.com']) const ALLOW_METHODS = 'GET,POST,OPTIONS' const ALLOW_HEADERS = 'content-type, authorization, x-request-id' export async function OPTIONS(req: Request) { const origin = req.headers.get('origin') || '' const method = req.headers.get('access-control-request-method') || '' const reqHeaders = req.headers.get('access-control-request-headers') || '' if (!ALLOW_ORIGINS.has(origin) || !ALLOW_METHODS.includes(method)) { return new Response('Forbidden', { status: 403 }) } return new Response(null, { status: 204, headers: { 'Access-Control-Allow-Origin': origin, 'Access-Control-Allow-Credentials': 'true', 'Access-Control-Allow-Methods': ALLOW_METHODS, 'Access-Control-Allow-Headers': reqHeaders || ALLOW_HEADERS, 'Access-Control-Max-Age': '600', 'Vary': 'Origin, Access-Control-Request-Method, Access-Control-Request-Headers', }, }) } export async function GET(req: Request) { const origin = req.headers.get('origin') || '' const body = JSON.stringify({ ok: true, time: Date.now() }) if (!ALLOW_ORIGINS.has(origin)) { return new Response('Forbidden', { status: 403 }) } return new Response(body, { headers: { 'Content-Type': 'application/json; charset=utf-8', 'Access-Control-Allow-Origin': origin, 'Access-Control-Allow-Credentials': 'true', 'Access-Control-Expose-Headers': 'x-request-id', 'Vary': 'Origin', 'Cache-Control': 'no-store', }, }) } 治理建议凭据请求必须返回具体源而非 `*`,并设置 `Access-Control-Allow-Credentials: true`。预检响应缓存时长通过 `Access-Control-Max-Age` 控制,结合 `Vary` 防止不同请求组合被混淆。对匿名场景可使用 `Access-Control-Allow-Origin: *` 且不含凭据,降低复杂度。结论在 Edge Route Handler 中明确源、方法、头与缓存策略,可显著降低跨域延迟并避免缓存污染,同时保持凭据场景的安全与一致性。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部
2.287720s