如何获取来自外部网站的带完整路径的referrer来源地址
你遇到的document.referrer跨域场景下无法获取完整路径的问题,本质是由浏览器的Referrer Policy(引荐来源政策) 控制的。
当前绝大多数浏览器默认启用strict-origin-when-cross-origin策略,规则如下:
- 同站跳转时,发送包含路径、查询参数在内的完整Referrer信息
- 跨站跳转时,仅发送来源站点的源信息(协议+域名+端口,不包含路径、查询参数)
- HTTPS站点跳转到HTTP站点时,不发送任何Referrer信息
包括Google在内的多数大型站点还会主动配置更严格的Referrer Policy,避免用户的访问路径、搜索关键词等敏感信息泄露给第三方站点,因此你默认无法获取这类外站跳转的完整来源路径。
解决方案
场景1:可以控制来源跳转站点的配置
如果跳转来源站点归你管理,可以通过以下配置允许跨域发送完整Referrer:
- 全局配置站点响应头,添加:
该规则下HTTPS到HTTPS的跨域跳转将发送完整Referrer,HTTPS到HTTP的跳转不会发送Referrer,兼顾安全性与业务需求。Referrer-Policy: no-referrer-when-downgrade - 针对单个跳转链接单独配置,在
<a>标签上添加referrerpolicy属性:<a href="https://example.com" referrerpolicy="no-referrer-when-downgrade">跳转示例</a>
场景2:无法控制来源跳转站点的配置
如果你没有权限修改来源站点的配置,没有任何手段可以强制浏览器发送完整的跨域Referrer,这是浏览器和来源站点共同遵循的安全规则,目标站点无权篡改。
如果是合作方站点跳转场景,可以协商让对方在跳转的目标URL中拼接编码后的来源路径作为查询参数,你在本站直接读取URL参数即可获取完整来源路径,示例:
跳转目标地址格式:https://example.com?from=https%3A%2F%2Fpartner.com%2Fpath
读取代码:
const fromPath = decodeURIComponent(new URL(location.href).searchParams.get('from'))
内容的提问来源于stack exchange,提问作者ejade
相关产品推荐
相关产品推荐

