meta 标签的 referrer 属性如何控制 HTTP 请求头发送
meta 标签的 referrer 属性用于控制页面跳转时 HTTP 请求头中 Referer 字段的内容。
referrer 属性控制请求头发送的原理
meta 标签的 referrer 属性通过设置 HTTP Referer 请求头来控制页面跳转时的来源信息。当页面发起跨域请求或跳转时,浏览器会根据该属性决定是否发送 Referer 头以及发送的具体内容。例如,设置 content 为 origin 时,只发送协议、域名和端口,不包含路径和参数。这种机制确保了在跨域资源加载时,服务器可以获取来源信息,同时保护用户隐私。
该属性在 HTML 文档的 head 部分定义,必须包含 name 属性为 referrer 和 content 属性指定具体策略。浏览器在解析页面时会读取该设置,并在后续的 HTTP 请求中应用相应的策略。需要注意的是,动态插入该 meta 标签可能导致行为不可预测,因此建议在页面加载前静态配置。
referrer 属性的具体取值与行为差异
referrer 属性的 content 值决定了 Referer 头的发送规则,常见的取值包括 no-referrer、origin、no-referrer-when-downgrade 等。no-referrer 表示不发送任何 Referer 头,origin 仅发送来源的协议、域名和端口,no-referrer-when-downgrade 则在目标页面安全级别不低于当前页面时发送完整 URL,否则不发送。这些策略适用于不同的安全与隐私需求场景。
origin-when-cross-origin 策略在跨域请求时只发送来源,同源请求时发送完整 URL。strict-origin 策略仅当目标页面安全级别更高时发送来源,否则不发送。strict-origin-when-cross-origin 是默认行为,同源请求发送完整 URL,跨域且目标安全时发送来源,否则不发送。unsafe-URL 策略则无论跨域与否都发送完整 URL,可能泄露敏感路径信息。
配置 referrer 属性的检查步骤
首先,在网页的 head 部分添加 meta 标签,确保 name 为 referrer 且 content 指定具体策略。例如,要禁止发送 Referer 头,可添加 <meta name='referrer' content='no-referrer' />。保存文件后,使用浏览器开发者工具的 Network 面板查看跳转或请求的请求头,确认 Referer 字段是否符合预期。
如果动态插入 meta 标签导致行为异常,应检查 JavaScript 代码是否在页面加载后修改了 head 内容。静态配置通常更稳定,可避免不可预测的行为。验证时,可模拟跨域请求或跳转,观察请求头的变化,确保策略生效。
referrer 属性冲突时的处理规则
当页面中存在多个冲突的 referrer 策略定义时,浏览器会应用 no-referrer 策略。这意味着如果同时设置了多个 meta 标签或通过其他方式定义了策略,最终行为可能不符合预期。因此,建议在页面中只定义一个明确的 referrer 策略,避免冲突。
此外,动态插入 meta 标签(如使用 document.write 或 appendChild)可能导致策略未生效或行为不一致。静态配置在页面加载前完成,能确保策略正确应用。检查时,可查看页面源代码,确认 meta 标签的位置和内容是否正确,避免因动态插入导致的配置错误。
资料与延伸阅读
你可以通过以下原始资料核对文中概念,并继续深入阅读。