HTTP头部是客户端和服务端之间的交流体系。Referer是HTTP的一个头部字段,用于标识HTTP请求来源的地址,即上一个页面的地址。它可以在浏览器中被禁用,而且可以被篡改,但它仍然是一个非常有用、重要的头部字段。
Referer用于以下几点:
- 统计分析
Referer可以用于网站某一页被访问的来源量,帮助网站分析用户的行为,为后续网站推广和营销提供方向。比如,如果我们在编写广告时,可以在链接中添加“utm_source=XXX”的参数,当用户从这个链接访问我们的页面时,就可以通过Referer判断这个访问是从哪个广告推荐链接过来的。
- 防盗链
Referer还可以用于防止盗链。比如,我们有一张图片需要放到我们自己的网站上,那么我们可以设置Referer只允许来自我们自己的网站域名的请求访问这张图片。当有其他网站在未授权的情况下直接引用我们的图片时,我们可以根据Referer是否来自我们自己的网站来判断是否是盗链,并进行相应的处理。
下面是两个示例,一是统计分析,二是防盗链。
示例1:统计分析
假设我们有一个form表单,当我们提交该表单时,页面会跳转到result.html,并且在地址栏中添加上请求参数,以达到统计的目的。
代码如下:
<!-- form表单 -->
<form action="/result.html" method="post">
<input type="text" name="username" placeholder="Username">
<input type="text" name="password" placeholder="Password">
<button type="submit">Submit</button>
</form>
当我们提交该表单时,可以通过JavaScript取到Referer,然后在页面跳转时将Referer作为参数添加到地址中,以实现统计分析。
代码如下:
// JavaScript获取Referer
var referrer = document.referrer;
// 更改页面跳转链接,并添加Referer参数
document.querySelector("form").addEventListener("submit", function(event) {
event.preventDefault();
window.location.href = '/result.html?referrer=' + encodeURIComponent(referrer);
});
这样,我们就可以在result.html中拿到Referer参数,并对访问来源进行统计分析了。
示例2:防盗链
我们假设有一张图片,需要放到我们的网站上,并且只允许我们自己的网站访问。
代码如下:
<!-- 网站A -->
<img src="https://websiteB.com/image.jpg">
我们可以在网站B(图片的来源)的服务器上设置Referer只允许来自网站A的请求访问。
代码如下:
// PHP代码
$referer = $_SERVER['HTTP_REFERER']; // 获取Referer
if (strpos($referer, 'https://websiteA.com') !== false) {
header('Access-Control-Allow-Origin: https://websiteA.com'); // 只允许网站A访问
header('Content-Type: image/jpeg'); // 设置图片类型
readfile('image.jpg'); // 输出图片
} else {
header("HTTP/1.1 403 Forbidden"); // 返回403禁止访问
echo "You are not authorized to access this resource.";
exit;
}
当网站A访问时,我们就可以正常获取图片。而其他未授权的来源就无法通过Referer访问我们的图片了。
以上就是关于Referer头部的作用和使用示例。当然,在实际应用中,我们还需要注意Referer可能被篡改和禁用的问题,且不应过分依赖它来做安全控制,应该综合使用其他技术手段,以更好地保证应用的安全和可靠性。