Referer 请求头是一个 HTTP 请求头部,用于指定从哪个网页或 URL 触发了当前请求。它告诉服务器请求的来源,帮助服务器了解访问者是从哪里来到当前页面的。
主要用途
-
分析和统计: 服务器可以通过
Referer头部来分析流量来源,了解访问者是从哪个网页或网站点击链接来到当前页面的。这对于网站分析、优化和市场营销非常重要。 -
安全和权限检查: 某些应用会使用
Referer头部来进行简单的安全检查,确保请求来自合法的来源。例如,表单提交或特定操作仅允许从本站页面发起,防止跨站请求伪造(CSRF)攻击。 -
内容定制: 基于
Referer头部,服务器可以根据访问来源定制响应内容。例如,不同来源的用户可能会看到不同的广告或推荐内容。
示例
正常请求
假设用户从 https://example.com/page1.html 点击了一个链接,跳转到 https://anotherexample.com/page2.html。浏览器发送的请求头部中包含 Referer:
GET /page2.html HTTP/1.1
Host: anotherexample.com
Referer: https://example.com/page1.html
在表单提交中使用
假设用户在 https://example.com/form.html 上填写并提交了一个表单,提交请求包含 Referer:
POST /submit-form HTTP/1.1
Host: example.com
Referer: https://example.com/form.html
Content-Type: application/x-www-form-urlencoded
Content-Length: 20
name=JohnDoe&age=30
注意事项
-
隐私和安全:
Referer头部可能会泄露敏感信息,例如包含在 URL 中的查询参数。这可能导致隐私泄露。- 为了保护隐私,浏览器和服务器可以使用
Referrer-Policy头部控制Referer的行为。
-
Referrer-Policy:Referrer-Policy是一个 HTTP 头部,用于指定在请求中应包含什么样的Referer信息。常见的策略包括:no-referrer:不发送Referer头部。no-referrer-when-downgrade(默认):从 HTTPS 页面到 HTTP 页面不发送Referer,其他情况发送。origin:只发送来源部分,不包括路径和查询参数。strict-origin-when-cross-origin:跨域请求只发送来源,同源请求发送完整 URL。unsafe-url:发送完整的 URL(可能不安全)。
例如,在 HTML 中设置
Referrer-Policy:<meta name="referrer" content="no-referrer">在 HTTP 响应头中设置:
Referrer-Policy: no-referrer
浏览器默认行为
如果不设置 Referer 相关的策略,浏览器通常会默认发送 Referer 头部。具体行为取决于浏览器的默认设置和请求的具体情况。下面是默认情况下 Referer 头部的行为:
默认行为
-
同源请求: 对于同源请求(即请求的目标与当前页面的源相同),浏览器通常会发送完整的
RefererURL,包括路径和查询参数。 -
跨域请求:
- 对于从 HTTPS 页面到 HTTP 页面(即从更安全的源到不安全的源)的请求,浏览器一般不会发送
Referer头部。这种行为有助于防止潜在的隐私泄露。 - 对于从 HTTP 页面到其他页面或从 HTTPS 页面到另一个 HTTPS 页面,浏览器通常会发送
Referer头部。
- 对于从 HTTPS 页面到 HTTP 页面(即从更安全的源到不安全的源)的请求,浏览器一般不会发送
通过 Referrer-Policy 控制 Referer 头部
开发者可以通过设置 Referrer-Policy 头部来控制 Referer 头部的行为。以下是一些常见的 Referrer-Policy 策略:
-
no-referrer: 不发送
Referer头部。Referrer-Policy: no-referrer -
no-referrer-when-downgrade(默认): 从 HTTPS 页面到 HTTP 页面不发送
Referer,其他情况发送完整 URL。Referrer-Policy: no-referrer-when-downgrade -
origin: 仅发送来源部分(scheme、host、port),不包括路径和查询参数。
Referrer-Policy: origin -
origin-when-cross-origin: 同源请求发送完整 URL,跨域请求仅发送来源部分。
Referrer-Policy: origin-when-cross-origin -
same-origin: 仅为同源请求发送
Referer头部,跨域请求不发送。Referrer-Policy: same-origin -
strict-origin: 同协议请求发送来源部分,跨协议请求不发送。
Referrer-Policy: strict-origin -
strict-origin-when-cross-origin: 同源请求发送完整 URL,跨域请求发送来源部分,跨协议请求不发送。
Referrer-Policy: strict-origin-when-cross-origin -
unsafe-url: 发送完整 URL(包括路径和查询参数),无论是否跨域或跨协议(不推荐,因存在安全和隐私风险)。
Referrer-Policy: unsafe-url
示例:在 HTML 中设置 Referrer-Policy
可以在 HTML 中通过 <meta> 标签设置 Referrer-Policy:
<meta name="referrer" content="no-referrer">
或者在 HTTP 响应头中设置:
Referrer-Policy: no-referrer
总结
Referer 请求头用于指示请求的来源 URL,帮助服务器了解请求的来源页面。这在流量分析、安全检查和内容定制等方面都有重要作用。然而,为了保护用户隐私和安全,必须小心处理 Referer 头部信息,必要时使用 Referrer-Policy 进行控制。