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

如何在SvelteKit API中安全获取请求来源的域名?

可靠获取请求源的解决方案

本地测试阶段

本地跨域请求场景下,浏览器会自动为跨域请求添加Origin请求头,这个头无法被前端篡改(浏览器会强制校验)。你当前只拿到referer,可能是请求配置或场景问题,建议修改代码优先读取Origin:

export async function GET({ request, params, fetch }) {
  const headers = request.headers
  // 优先用Origin头,比Referer更可靠
  const origin = headers.get('Origin') || headers.get('referer')
  console.log(origin)

  ...
}

生产环境(Caddy反向代理)

部署后,后端直接读取Origin会拿到Caddy代理的地址,需要配置Caddy传递客户端真实的源信息:

  1. 在Caddyfile中添加头传递配置,保留客户端原始请求头,还可自定义兜底头:
your-domain.com {
  reverse_proxy localhost:5002 {
    header_up Origin {http.request.header.Origin}
    header_up Referer {http.request.header.Referer}
    // 可选:添加自定义头,后端优先读取这个更安全
    header_up X-Forwarded-Origin {http.request.header.Origin}
  }
}
  1. 修改SvelteKit API代码,优先读取自定义代理头:
export async function GET({ request, params, fetch }) {
  const headers = request.headers
  const origin = headers.get('X-Forwarded-Origin') || headers.get('Origin') || headers.get('referer')
  console.log(origin)

  ...
}

核心注意事项

  • Origin是跨域场景下最可靠的源标识,前端无法篡改,同域请求时可能不存在,此时再 fallback 到Referer。
  • 必须确保Caddy正确传递客户端原始请求头,避免后端拿到代理服务器的地址。
  • Referer容易被篡改或因浏览器隐私设置被屏蔽,仅适合作为最后的兜底方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 04:29:55