内容优化 / 方法解读

meta 标签的 referrer 属性如何控制跨域请求发送的 URL 信息

通过设置 content 属性为 origin-when-cross-origin 可以在跨域请求时只发送来源域名。

设置 origin-when-cross-origin 策略的方法

在 HTML 文档的 head 部分添加 meta 标签,设置 name 为 referrer,content 属性指定为 origin-when-cross-origin。例如使用 <meta name='referrer' content='origin-when-cross-origin' />。该标签会控制文档发送请求时携带的 Referer 信息,确保在跨域场景下不泄露完整路径。

该属性必须定义 content 属性,否则无效。当设置了 origin-when-cross-origin 策略后,浏览器在发起跨域请求时会仅发送来源域名,而不包含完整的 URL 路径。这有助于在保护隐私的同时,让第三方服务器知道请求来自哪个域名,但无法获取具体的页面路径信息。

与其他策略值的区别

origin-when-cross-origin 策略与 origin 策略不同,后者对所有请求(包括同源请求)都只发送来源域名。origin-when-cross-origin 仅在跨域请求时限制信息,同源请求仍会发送完整的 URL(通常不含参数)。这种差异使得该策略在保持同源请求完整性的同时,限制了跨域请求的信息泄露。

除了 origin-when-cross-origin,referrer 属性还支持多种策略值,如 no-referrer、origin、strict-origin 等。no-referrer 不发送任何信息,origin 只发送域名,strict-origin 在安全协议转换时限制发送。选择 origin-when-cross-origin 可以在跨域请求中平衡隐私保护与来源追踪的需求。

验证 referrer 策略是否生效

可以使用网络抓包工具(如浏览器开发者工具的 Network 面板)检查请求头。在发送跨域请求的请求头中查找是否存在 Referer 字段。如果该字段存在但只包含域名(如 example.com)而不包含路径,则说明 origin-when-cross-origin 策略已生效。也可以通过第三方网站提供的检测工具进行验证。

如果发现请求头中包含完整的 URL 路径,请检查 meta 标签是否位于 head 部分且未被动态脚本覆盖。确保 content 属性值严格为 origin-when-cross-origin,且没有其他冲突的 meta 标签定义。此外,动态插入该标签可能导致行为不可预测,建议在 HTML 源码中静态定义。

动态插入标签的风险

使用 document.write() 或 appendChild() 等方法动态插入 <meta name='referrer'> 标签会导致行为不可预测。浏览器可能无法正确识别或应用这些动态添加的策略,导致 referrer 行为与预期不符。动态插入还可能影响页面加载时的渲染顺序,增加调试难度。

如果存在多个冲突的策略定义,浏览器将应用 no-referrer 策略。因此,建议在 HTML 源码中静态定义该标签,以确保其生效且行为一致。避免在脚本中修改此属性以防止意外覆盖。静态定义可以确保 referrer 策略在页面加载时立即生效,且不会受到脚本执行顺序的影响。

资料与延伸阅读

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

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