referer 头
好的,我们来详细解释一下 HTTP 请求头中的 Referer。
这是一个非常基础且重要的概念,尤其在网络开发、安全分析和搜索引擎优化(SEO)中。
1. 什么是 Referer 头?
Referer 请求头包含了当前请求页面的来源页面的地址。简单来说,它告诉服务器“用户是从哪个页面链接过来的”。
- 词源:这个词的正确拼写应该是 "Referrer",但由于一个早期的拼写错误被写入 HTTP 规范,一直沿用至今,变成了 "Referer"。
- 示例:
- 你在
site-a.com的页面上点击了一个链接,跳转到了site-b.com。 - 当浏览器向
site-b.com发送请求时,会在 HTTP 请求头中自动加上一行:Referer: https://site-a.com/some-page site-b.com的服务器就能知道,这个用户是从site-a.com过来的。
- 你在
2. Referer 头的主要作用是什么?
数据分析与分析:
- 这是最常见的用途。网站管理员(例如通过 Google Analytics 等工具)可以分析流量来源,了解用户是通过哪些网站、搜索引擎或社交媒体链接到自己的站点的。这对于评估营销活动的效果至关重要。
防盗链:
- 很多网站(如图片托管站、视频站)使用
Referer头来防止盗链。服务器会检查Referer值:- 如果
Referer是自己的域名(例如my-website.com),则允许访问图片或资源。 - 如果
Referer是空或者是其他陌生域名,则返回一个错误(如 403 Forbidden)或一张替代图片(如“此图片禁止外链”)。
- 如果
- 很多网站(如图片托管站、视频站)使用
优化缓存策略:
- 服务器可以根据引用来决定如何缓存内容。例如,从搜索引擎结果页跳转过来的请求和从本站内链跳转的请求,可能会采用不同的缓存策略。
防止恶意请求(CSRF 防护的一部分):
- 在一些简单的场景中,可以通过检查
Referer头来帮助抵御跨站请求伪造攻击。如果请求的Referer不是受信任的域名,服务器可以拒绝该请求。但请注意,这种方法并不可靠,不能作为唯一的防护手段,因为Referer头可能被浏览器策略禁止发送或被恶意伪造。
- 在一些简单的场景中,可以通过检查
3. 隐私与安全考量
由于 Referer 头会泄露用户的浏览路径,可能包含敏感信息(如 URL 中的会话 ID、搜索关键词等),这带来了隐私问题。
因此,浏览器和网络标准提供了多种方式来控制或禁止发送 Referer 头:
Referrer-Policy:
- 这是一个更新的 HTTP 响应头,网站可以通过它来精确控制如何发送
Referer信息。它比下面要提到的rel="noreferrer"更灵活。常见的策略有:no-referrer:完全不发送Referer头。no-referrer-when-downgrade(浏览器默认策略):从 HTTPS 网站链接到 HTTP 网站(安全降级)时不发送Referer,其他情况发送。same-origin:仅在同源请求(目标与来源协议、域名、端口一致)时发送。strict-origin:在安全降级(HTTPS -> HTTP)时不发送,同源或同安全级别(HTTPS -> HTTPS, HTTP -> HTTP)时只发送源(Origin,即协议+域名+端口),不发送完整 URL。origin:在任何情况下都只发送源(协议+域名+端口),而不发送完整的路径和查询参数。
- 这是一个更新的 HTTP 响应头,网站可以通过它来精确控制如何发送
HTML 属性:
rel="noreferrer"- 可以在链接 (
<a>) 或表单 (<form>) 标签上添加这个属性,点击该链接或提交该表单时,浏览器将不发送Referer头。 - 示例:
<a href="https://example.com" rel="noreferrer">一个不传递来源的链接</a>
- 可以在链接 (
浏览器设置:
- 用户可以在浏览器的高级设置中完全禁用
Referer头的发送(但大多数普通用户不会这么做)。
- 用户可以在浏览器的高级设置中完全禁用
总结
| 特性 | 描述 |
|---|---|
| 定义 | HTTP 请求头,指示当前请求的来源页面 URL。 |
| 用途 | 流量分析、防盗链、缓存优化、辅助安全防护。 |
| 隐私风险 | 可能泄露用户的浏览历史和 URL 中的敏感信息。 |
| 控制方法 | 使用 Referrer-Policy 响应头、rel="noreferrer" 标签属性或浏览器设置。 |
希望这个详细的解释能帮助你完全理解 Referer 头!如果你有任何具体的使用场景想了解,可以继续提问。