area标签的referrerpolicy属性有用,但仅在作为可点击热区且跳转目标为跨源url时生效,控制导航请求的referer头,对图片加载等无效。

area 标签的 referrerpolicy 属性到底有没有用
有用,但仅限 <area> 作为可点击热区、且跳转目标为跨源 URL 时生效。它和 <a></a> 标签行为一致:只控制「点击该区域后发起的导航请求」的 Referer 头,对图片加载、JS 动态请求、右键新标签页等场景完全无效。
常见错误现象:<area> 加了 referrerpolicy="no-referrer",但 Network 面板里跳转请求仍有 Referer;或目标站返回 403 —— 很可能是因为你误以为它能控制 <img src> 的 Referer(实际不能,<area> 不发起资源加载,只触发跳转)。
-
<area>必须包裹在<map></map>内,且需有href属性,否则referrerpolicy被忽略 - 值大小写敏感:
no-referrer有效,No-Referrer或no_referrer会被浏览器静默退化为默认策略 - 同源跳转时该属性被忽略,Referer 照常发完整 URL(浏览器行为,无法干预)
- 若同时设置了服务端
Referrer-Policy响应头,该头优先级更高,但仅覆盖未显式声明referrerpolicy的元素;已写的<area>仍按自身值执行
referrerpolicy="strict-origin-when-cross-origin" 在 area 上的实际效果
这是目前最推荐的取值,尤其当你的图像地图链接跳转到第三方 SaaS、支付页或统计后台时。它比浏览器默认的 no-referrer-when-downgrade 更安全:跨源 HTTPS 跳转只发 https://example.com,不带路径和 query 参数(如 ?uid=123&token=abc)。
示例:
@@##@@ <map name="building-map"><area shape="rect" coords="0,0,100,100" href="https://pay.example.com/checkout" referrerpolicy="strict-origin-when-cross-origin"></map>
注意:<area> 的 referrerpolicy 不影响父页面加载 <img src="plan.png" usemap="#building-map"> 本身的 Referer —— 那由 <img> 自己的 referrerpolicy 或响应头控制。
为什么不能靠 统一配 area
<meta name="referrer"> 对 <area> 完全无效。它只在页面解析完成后、用户主动点击「未显式设策略」的 <a></a> 或提交 <form></form> 时起作用;而 <area> 是明确的可交互元素,浏览器会直接读取其自身属性,跳过 meta 全局策略。
更关键的是:<meta name="referrer"> 已被 Chrome 85+ 废弃,Safari 和 Firefox 也仅作兼容保留,2026 年实际项目中不应依赖它。
- 写了
<meta name="referrer" content="origin">,但<area href="https://third.com">仍发完整 Referer → 因为<area>有自己属性,且 meta 本身已失效 - 想统一管理所有跳转策略?唯一可靠方式是后端配置 HTTP 响应头
Referrer-Policy: strict-origin-when-cross-origin - 富文本编辑器或 CMS 导出的 HTML 地图常漏掉
referrerpolicy,需脚本扫描补全或构建时 lint 检查
area + target="_blank" 必须配 rel="noopener noreferrer"
仅加 referrerpolicy 不能防劫持。<area href="..." target="_blank"> 若没配 rel,攻击者可通过 window.opener.location 把你的原页面重定向到钓鱼页。
正确写法(顺序无关,但必须共存):
<area shape="circle" coords="50,50,30" href="https://analytics.example.com/dashboard" target="_blank" rel="noopener noreferrer" referrerpolicy="origin">
注意点:
-
rel="noopener"是安全底线,noreferrer是隐私补充;缺一不可 - 写成
rel="noreferrer noopener"可能被某些 Markdown 解析器截断,建议用空格分隔并确保两端无多余字符 -
rel="noreferrer"会彻底阻止 Referer 发送(比referrerpolicy="no-referrer"更彻底),但它对右键“在新标签页中打开”无效 —— 浏览器走默认策略
真正难控的是右键新开和 JS 跳转,这些只能靠服务端响应头兜底,前端单靠 <area> 属性做不到全覆盖。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











