HTTP referrer 获取前端用户访问来源

HTTPReferer头信息用于记录用户访问页面的来源,常用于用户跟踪,但也涉及隐私问题。直接输入地址或使用某些刷新方式不会发送Referer。可以通过rel=noreferrer或设定ReferrerPolicy控制其发送。文章讨论了Referer的安全性,以及如何通过中间界面保护数据不被泄露。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、介绍

HTTP Header referer 提供访问当前页面来源的信息
很有趣的是,这个字段的拼写是错的。
Referer的正确拼写是Referrer,但是写入标准的时候,不知为何,没人发现少了一个字母r。
标准定案以后,只能将错就错,所有头信息的该字段都一律错误拼写成Referer。(但通过js引用时是 document.referrer)

console.log(document.referer);  // JS获取http referer

$_SERVER['HTTP_REFERER'];  	// php获取http referer

二、应用场景

Referer字段的逻辑是这样的,用户在地址栏输入网址,或者选中浏览器书签,就不发送Referer字段。

不发送Referer字段场景:

  1. 直接输入地址
  2. 使用location.reload()刷新(location.href或者location.replace()刷新有信息);
  3. QQ,微信点击链接进入自身的浏览器
  4. 从https的网站直接进入一个http协议的网站
  5. a标签在rel设置noreferer
rel="noreferrer"
  1. 通过设定referer policy 值,在不同条件下控制referer的发送

以下三种场景,会发送Referer字段。

  1. 用户点击网页上的链接。
  2. 用户发送表单。
  3. 网页加载静态资源,比如加载图片、脚本、样式。

三、使用
Referer字段实际上告诉了服务器,用户在访问当前资源之前的位置。这往往可以用来用户跟踪。(如无需登录即可使用功能界面)

安全性:
由于涉及隐私,很多时候不适合发送Referer字段。

<a href="..." rel="noreferrer" target="_blank">xxx</a> 
//referrer正确拼写

Referer并不是安全的,因为可以通过插件修改发送头信息中的referer
解决:

Referer字段包含源信息、路径和查询字符串,不包含锚点、用户名和密码。
注意区分Referer字段和源信息(协议+域名+端口)

W3C Referrer Policy 设定8个值,在特定情况下发送,

  1. no-referrer 不发送
  2. no-referrer-when-downgrade HTTPS->HTTP(浏览器默认行为),不发送
  3. same-origin 同源(协议+域名+端口)不发送
  4. origin 不管是否跨域,Referer字段都只发送源信息(协议+域名+端口)
  5. strict-origin HTTPS->HTTP 不发送referer字段,其他只发送源信息
  6. origin-when-cross-origin 同源,发送referer完整信息,包括跨域
  7. strict-origin-when-cross-origin 同源时,发送完整的Referer字段;跨域时,如果 HTTPS 网址链接到 HTTP 网址,不发送Referer字段,否则发送源信息。
  8. unsafe-url Referer字段包含源信息、路径和查询字符串,不包含锚点、用户名和密码。

页面重定向
定制中间界面,通过A->B(中间)->C C获取到的是中间界面B,可以有效保护A界面数据不被泄露.

参考:

如何在前端统计用户访问来源_weixin_30484247的博客-CSDN博客
https://blog.csdn.net/weixin_30484247/article/details/98705127?utm_medium=distribute.pc_relevant.none-task-blog-title-1&spm=1001.2101.3001.4242

HTTP Referer 教程 - 阮一峰的网络日志
http://www.ruanyifeng.com/blog/2019/06/http-referer.html

JS获取上一访问页面URL地址document.referrer实践 « 张鑫旭-鑫空间-鑫生活
https://www.zhangxinxu.com/wordpress/2017/02/js-page-url-document-referrer/

前端JavaScript中分析用户通过搜索引擎输入的关键词,并应用这些数据进行定向推广,可以通过分析document.referrer属性实现。这个属性包含了用户访问当前页面前所在的URL,即来源URL。通过分析这个来源URL,可以提取出用户在不同搜索引擎上的搜索关键词。 参考资源链接:[前端JS获取用户在搜索引擎的搜索关键词](https://wenku.csdn.net/doc/6412b5ecbe7fbd1778d44dfd?spm=1055.2569.3001.10343) 首先,我们需要编写JavaScript代码来获取document.referrer的值。然后,使用正则表达式对这个URL进行匹配,以识别和提取出搜索引擎的搜索关键词。以百度搜索引擎为例,关键词通常位于URL参数`word`之后,因此可以使用正则表达式`/word\=([^&]+)/`来匹配并获取关键词。获取到关键词后,可以根据关键词进行相关的定向推广分析。 例如,以下是一段简单的JavaScript代码示例,用于从百度搜索引擎中获取搜索关键词: ```javascript var referer = document.referrer; var keyword = ''; if(referer) { var match = referer.match(/https?:\/\/***\/s\?wd=([^&]+)/); if (match && match.length > 1) { keyword = decodeURIComponent(match[1]); // 解码URL中的关键词 } } console.log('用户搜索关键词:', keyword); ``` 在这段代码中,我们首先检查document.referrer是否存在。如果存在,我们使用正则表达式匹配百度搜索URL中的`wd`参数,该参数包含了编码后的搜索关键词。之后,我们使用`decodeURIComponent`函数对提取的编码关键词进行解码,得到用户实际搜索的关键词。 然后,企业可以根据这些关键词优化其广告投放策略,进行更精准的定向推广。例如,可以根据用户搜索的关键词定制广告内容,或者对网站进行SEO优化,提升关键词的相关性排名。 需要注意的是,这种方法的实现依赖于用户的浏览器支持JavaScript,并且用户必须是从搜索引擎的搜索结果点击进入当前页面。此外,这种做法应当遵守相应的隐私政策和法律法规,避免侵犯用户隐私。 深入了解如何在前端JavaScript中获取和利用用户的搜索关键词,可以参考文章《前端JS获取用户在搜索引擎的搜索关键词》。这篇文章详细介绍了如何针对百度、搜狗等不同搜索引擎获取关键词,以及如何根据这些关键词进行定向推广分析,内容全面且实用,是学习和实践这一技能的好资源。 参考资源链接:[前端JS获取用户在搜索引擎的搜索关键词](https://wenku.csdn.net/doc/6412b5ecbe7fbd1778d44dfd?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值