内容优化 / 方法解读

meta referrer 属性 origin-when-cross-origin 如何控制跨域请求

origin-when-cross-origin 模式仅对同源请求发送完整 URL,对跨域请求仅发送源信息。

同源请求与跨域请求的发送差异

origin-when-cross-origin 模式下,当发起同源请求时,浏览器会发送完整的 URL,但会自动移除 URL 中的参数部分。这意味着目标服务器可以获取当前页面的完整路径信息,但无法获取具体的查询参数。对于跨域请求,该模式的行为则完全不同,浏览器只会发送源信息,即协议、域名和端口号,而不会发送完整的 URL 或任何参数。这种设计旨在平衡信息传递与隐私保护的需求。

这种差异化的发送策略是基于浏览器的安全机制实现的。同源请求通常被视为可信的,因此允许发送更详细的信息。而跨域请求由于涉及不同域之间的交互,为了防止敏感信息泄露,浏览器限制了发送的内容。通过这种区分,开发者可以在不牺牲安全性的前提下,尽可能多地提供有用的上下文信息给目标服务器。

参数移除的具体机制

在 origin-when-cross-origin 模式下,同源请求的 URL 会被自动处理,移除所有参数。例如,如果当前页面地址是 https://example.com/page?param=value,那么发送的 Referer 头将变为 https://example.com/page。这种处理方式确保了目标服务器只能看到页面的路径结构,而无法获取具体的查询参数。这对于防止参数泄露或追踪用户行为非常有帮助。

参数移除是浏览器在构建 HTTP 请求头时的标准行为。无论使用哪种 referrer 策略,只要涉及 URL 的发送,浏览器都会执行这一操作。这并不是 origin-when-cross-origin 模式独有的特性,而是所有 referrer 策略的通用规则。开发者需要注意,这种处理方式可能会影响依赖参数的统计或分析功能。

跨域请求仅发送源信息的规则

当目标服务器与当前页面不在同一个域时,origin-when-cross-origin 模式会触发跨域限制,仅发送源信息。源信息包括协议、域名和端口号,例如 https://example.com。这意味着目标服务器无法获取当前页面的具体路径或任何参数。这种严格的限制是为了防止跨域请求中的信息泄露,保护用户隐私。

这种规则确保了跨域请求的安全性。即使当前页面包含敏感信息,目标服务器也只能知道请求来自哪个域,而无法知道具体的页面路径或参数。这对于防止数据泄露和追踪用户行为至关重要。开发者在使用第三方服务时,应充分了解这种限制,并确保不会因为信息缺失而导致功能异常。

验证 referrer 头发送内容的步骤

要验证 origin-when-cross-origin 模式下的 referrer 头发送内容,可以使用浏览器开发者工具。首先,在页面中添加 <meta name='referrer' content='origin-when-cross-origin' /> 标签。然后,打开开发者工具的网络面板,发起一个跨域请求。在请求头中查看 Referer 字段,应该只显示源信息,而不包含路径或参数。

如果需要进一步确认,可以发起一个同源请求,并在网络面板中查看 Referer 头。此时,应该看到完整的 URL,但参数部分已被移除。通过对比同源和跨域请求的 Referer 头,可以清晰地验证 origin-when-cross-origin 模式的行为。这种方法简单直观,适用于大多数开发场景。

资料与延伸阅读

你可以通过以下原始资料核对文中概念,并继续深入阅读。

  1. &lt;meta name=&quot;referrer&quot;&gt; HTML attribute value - HTML | MDN ↗
← 更多内容优化文章返回顶部 ↑