Referer 请求头

434 阅读4分钟

Referer 请求头是一个 HTTP 请求头部,用于指定从哪个网页或 URL 触发了当前请求。它告诉服务器请求的来源,帮助服务器了解访问者是从哪里来到当前页面的。

主要用途

  1. 分析和统计: 服务器可以通过 Referer 头部来分析流量来源,了解访问者是从哪个网页或网站点击链接来到当前页面的。这对于网站分析、优化和市场营销非常重要。

  2. 安全和权限检查: 某些应用会使用 Referer 头部来进行简单的安全检查,确保请求来自合法的来源。例如,表单提交或特定操作仅允许从本站页面发起,防止跨站请求伪造(CSRF)攻击。

  3. 内容定制: 基于 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

注意事项

  1. 隐私和安全

    • Referer 头部可能会泄露敏感信息,例如包含在 URL 中的查询参数。这可能导致隐私泄露。
    • 为了保护隐私,浏览器和服务器可以使用 Referrer-Policy 头部控制 Referer 的行为。
  2. 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 头部的行为:

默认行为

  1. 同源请求: 对于同源请求(即请求的目标与当前页面的源相同),浏览器通常会发送完整的 Referer URL,包括路径和查询参数。

  2. 跨域请求

    • 对于从 HTTPS 页面到 HTTP 页面(即从更安全的源到不安全的源)的请求,浏览器一般不会发送 Referer 头部。这种行为有助于防止潜在的隐私泄露。
    • 对于从 HTTP 页面到其他页面或从 HTTPS 页面到另一个 HTTPS 页面,浏览器通常会发送 Referer 头部。

通过 Referrer-Policy 控制 Referer 头部

开发者可以通过设置 Referrer-Policy 头部来控制 Referer 头部的行为。以下是一些常见的 Referrer-Policy 策略:

  1. no-referrer: 不发送 Referer 头部。

    Referrer-Policy: no-referrer
    
  2. no-referrer-when-downgrade(默认): 从 HTTPS 页面到 HTTP 页面不发送 Referer,其他情况发送完整 URL。

    Referrer-Policy: no-referrer-when-downgrade
    
  3. origin: 仅发送来源部分(scheme、host、port),不包括路径和查询参数。

    Referrer-Policy: origin
    
  4. origin-when-cross-origin: 同源请求发送完整 URL,跨域请求仅发送来源部分。

    Referrer-Policy: origin-when-cross-origin
    
  5. same-origin: 仅为同源请求发送 Referer 头部,跨域请求不发送。

    Referrer-Policy: same-origin
    
  6. strict-origin: 同协议请求发送来源部分,跨协议请求不发送。

    Referrer-Policy: strict-origin
    
  7. strict-origin-when-cross-origin: 同源请求发送完整 URL,跨域请求发送来源部分,跨协议请求不发送。

    Referrer-Policy: strict-origin-when-cross-origin
    
  8. 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 进行控制。