欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

<meta name="referrer" content="no-referrer"> 详解 AG chatgpt 有大用 有大大用

<meta name="referrer" content="no-referrer"> 详解

作用
该标签用于控制浏览器在跳转或请求资源时发送的 Referer(HTTP 请求头) 的信息,可以影响 CORS(跨域资源共享)行为、隐私保护和某些 API 的限制。


1. 语法

html
<meta name="referrer" content="策略值">

其中,content 可取的策略值如下:

策略值含义
no-referrer完全不发送 Referer 头,适用于隐私保护或绕过某些 CORS 限制(但可能影响功能)。
no-referrer-when-downgrade(默认)在 HTTPS→HTTP 跳转时不发送 Referer(安全策略)。
origin仅发送当前页面的域名(不包含路径),例如:Referer: https://example.com
origin-when-cross-origin同源时发送完整 URL,跨域时仅发送域名
same-origin仅在同源时发送 Referer,跨域时不发送
strict-originHTTPS→HTTPS 时发送域名,但 HTTPS→HTTP 时不发送(比 no-referrer-when-downgrade 更严格)。
strict-origin-when-cross-origin默认推荐策略,跨域时仅发送域名,且 HTTPS→HTTP 时不发送
unsafe-url始终发送完整 URL(可能泄露敏感路径信息,不推荐)。

2. 常见用途

(1) 修复 CORS 问题

  • 某些网站可能检查 Referer 头来阻止外部访问(如防盗链),设置 no-referrer 可能绕过此类限制:

    html
    <meta name="referrer" content="no-referrer">
  • 但仅限于简单请求(如图片、JS 资源),复杂的 AJAX 请求仍需服务端支持 Access-Control-Allow-Origin

(2) 保护隐私

  • 防止第三方网站通过 Referer 获取当前页面的 URL 路径(例如包含敏感信息的页面)。

(3) 影响 API 行为

  • 某些 API(如 Cloudflare、AWS S3)可能依赖 Referer 进行权限控制,移除 Referer 可能导致功能异常。


3. 注意事项

  • 并非万能:大多数 CORS 问题仍需后端配置 Access-Control-Allow-Origin

  • 安全性影响no-referrer 可能使某些基于 Referer 的安全策略失效。

  • 浏览器兼容性:主流浏览器均支持,但在老旧浏览器(如 IE11)可能不生效。


4. 实测示例

(1) CORS 请求

如果原页面是 http://shipingzhong.cn,访问 http://jsfaq.luxshare-ict.com/.../image.png,浏览器默认会发送:

Referer: http://shipingzhong.cn/page.html

某些服务器可能拒绝这类跨域请求。
添加 <meta name="referrer" content="no-referrer"> 后,Referer 头不再发送,可能绕过检查(但仍然需要目标服务器允许匿名访问)。

(2) 防止 URL 泄露

html
<!-- 当前页面的 URL 不会出现在目标网站的 Referer 头 --> <meta name="referrer" content="no-referrer">

5. 替代解决方案

如果 no-referrer 不适用:

  1. 后端代理(推荐):通过自己的服务器中转请求(如 Nginx、Node.js)。

  2. 改用 HTTPS:很多现代 API 要求 HTTPS 才能正常工作。

  3. CORS 服务端配置:让资源服务器返回 Access-Control-Allow-Origin: *


总结

<meta name="referrer" content="no-referrer"> 适合: ✅ 绕过简单的防盗链(CORS 限制)
✅ 保护隐私(防止 URL 泄露)

但真正解决 CORS 问题通常需要 后端支持 或 HTTPS 升级


普通分类: