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

浏览器发送HTTP请求时Referer字段来源及改写document.referrer无效问题

为什么修改document.referrer不影响HTTP请求头的Referer字段?

你这段代码改的只是浏览器暴露给JavaScript的DOM接口返回值,和HTTP请求头里的Referer完全是两回事:

  • HTTP请求头的Referer是浏览器网络层内部生成的,它的来源是当前页面的真实导航上下文:比如从页面A点击链接跳转到页面B,Referer就是A的URL;直接在地址栏输入网址打开页面,Referer就是空。这个值由浏览器底层维护,JavaScript无法直接篡改。
  • document.referrer只是浏览器提供给JS读取上述导航来源的一个“访问入口”,你用Object.defineProperty重写它的getter,只是让JS代码里读到的document.referrer变成空,但浏览器底层记录的真实导航来源并没有被修改。所以发起HTTP请求时,浏览器还是会用真实值生成Referer请求头。

补充:如果想控制Referer字段,只能通过合法配置方式,比如页面的<meta name="referrer" content="xxx">标签,或者服务器端的CSP referrer策略,JS直接修改DOM接口是无效的。

你的测试代码:

Object.defineProperty(Document.prototype, 'referrer', { get: function(){ return ''; } });
// document.referrer --> ''

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 13:05:19