HTTP 响应字段 strict-origin-when-cross-origin 的含义介绍

发布时间 2023-11-17 18:55:30作者: JerryWang_汪子熙

Referrer Policy 是一个 HTTP 响应头部字段,用于控制浏览器在发送跳转请求时,将当前页面的 URL 信息如何包含在 Referer 首部字段中。Referrer Policy 的值可以设置为不同的策略,其中 "strict-origin-when-cross-origin" 是一种常见的策略,它具体的含义是:

  1. 当请求源(origin)和目标源(origin)相同时,将包含完整的 URL 信息。
  2. 当请求源和目标源不同源时,仅包含请求源的 origin 信息,不包含路径或查询参数等详细信息。

下面我将详细解释 Referrer Policy 的工作原理,并提供一些示例来说明它的应用。

Referrer 和 Referrer Policy

在理解 "strict-origin-when-cross-origin" 前,我们需要了解 Referrer 和 Referrer Policy 的背景。

Referrer: Referrer 是 HTTP 请求的一个首部字段,它用于指示请求是从哪个页面跳转而来的。通常,Referrer 首部包含了当前页面的 URL,这对于一些网站分析和安全策略非常有用。例如,如果用户从一个网页点击到另一个网页,目标网页可以通过 Referrer 首部获取跳转前的来源网页信息。

Referrer Policy: Referrer Policy 是一种安全策略,允许网站控制浏览器在发送请求时,是否将当前页面的 URL 信息包含在 Referrer 首部中,以及如何包含。这有助于保护用户的隐私和提高安全性。

"strict-origin-when-cross-origin" 策略

"strict-origin-when-cross-origin" 是一种比较严格的 Referrer Policy 策略。它的行为如下:

  1. 当请求从一个页面 A 跳转到同一源的页面 B 时,Referrer 首部会包含完整的 URL 信息,包括路径和查询参数。这是为了确保目标页面 B 能够获取足够的信息来处理请求。

    例如,如果页面 A 的 URL 是 https://example.com/pageA,用户点击链接跳转到 https://example.com/pageB,那么 Referrer 首部中将包含完整的来源 URL https://example.com/pageA

  2. 当请求从页面 A 跳转到不同源的页面 C 时,Referrer 首部只包含请求源的 origin 信息,而不包含路径或查询参数等详细信息。这是为了减少敏感信息的泄露。

例如,如果页面 A 的 URL 是 https://example.com/pageA,用户点击链接跳转到 https://otherdomain.com/pageC,那么 Referrer 首部中将只包含 https://example.com,而不包含页面 A 的具体路径和查询参数。

这种策略的目的是在同一源内保持信息的完整性,同时在不同源之间限制信息泄露,从而提高用户隐私和安全性。

示例

为了更好地理解 "strict-origin-when-cross-origin" 策略,让我们看一些具体的示例:

同一源的跳转

假设用户正在访问以下页面 A 的 URL:https://example.com/pageA

用户点击页面 A 上的链接,跳转到同一源的页面 B:https://example.com/pageB

根据 "strict-origin-when-cross-origin" 策略,当请求从页面 A 到页面 B 时,Referrer 首部会包含完整的来源 URL 信息:

Referer: `https://example.com/pageA`

这样,页面 B 可以知道用户是从页面 A 跳转而来的,并获取页面 A 的详细信息。

跨源的跳转

假设用户正在访问以下页面 A 的 URL:https://example.com/pageA

用户点击页面 A 上的链接,跳转到不同源的页面 C:https://otherdomain.com/pageC

根据 "strict-origin-when-cross-origin" 策略,当请求从页面 A 到页面 C 时,Referrer 首部只包含请求源的 origin 信息,而不包含路径或查询参数等详细信息:

Referer: `https://example.com`

这样,页面 C 只知道请求来自 https://example.com,但无法获取页面 A 的具体路径或其他敏感信息。

为什么使用 "strict-origin-when-cross-origin"

"strict-origin-when-cross-origin" 是一种相对较严格的 Referrer Policy 策略,它在跨源跳转时限制了信息的泄露。这种策略有以下优点:

  1. 隐私保护: 在跳转到不同源时,只包含请求源的 origin 信息,而不包含具体路径或查询参数,有助于保护用户的隐私。用户的敏感信息不会泄露给不同源的网站。

  2. 安全性增强: 减少了信息泄露的可能性,有助于提高网站的安全性。攻击者无法轻易获取到跳转前页面的详细信息,从而减少了一些攻击的可能性。

  3. 符合最佳实践: "strict-origin-when-cross-origin" 是一种符合网络安全和隐私最佳实践的策略。它有助于网站遵循现代的数据隐私法规,如 GDPR。

总之,"strict-origin-when-cross-origin" 策略有助于在用户体验、隐私和安全性之间取得平衡,从而提供更好的网络环境。

如何设置 Referrer Policy

要设置 Referrer Policy,您需要在服务器端配置您的网站或应用程序的

HTTP 响应头部。具体的设置方式取决于您使用的服务器软件和编程语言。以下是一个示例,演示如何在 Apache 服务器上设置 Referrer Policy:

在 Apache 配置文件中,您可以使用 Header 指令来设置 Referrer Policy。在 .htaccess 文件中,可以添加以下行:

Header always set Referrer-Policy "strict-origin-when-cross-origin"

这将告诉 Apache 服务器在响应中包含 "Referrer-Policy" 头部,并将其值设置为 "strict-origin-when-cross-origin"。

在其他服务器环境中,设置方法可能有所不同。在 Node.js 中,您可以使用 Express 框架的中间件来设置 Referrer Policy。在 Python 中,您可以使用 Django 或 Flask 框架的设置来配置。

结论

Referrer Policy 是一项有助于控制浏览器在发送跳转请求时如何包含 Referrer 信息的安全策略。"strict-origin-when-cross-origin" 是其中一种常见的策略,它在同一源内保持信息的完整性,同时在不同源之间限制信息泄露。这有助于提高用户的隐私和增强网络安全性。

在配置 Referrer Policy 时,网站管理员需要仔细考虑用户隐私和网站安全性的需求,选择适当的策略。"strict-origin-when-cross-origin" 策略是一个很好的选择,它遵循现代网络安全和隐私的最佳实践,为用户提供更好的网络体验。