CORP必须通过HTTP响应头设置,不能用或JS设置,因为浏览器在解析HTML前已决定是否加载跨源资源,而CORP是强制性响应级策略,需服务器在返回资源时明确声明。

CORP 不是 HTML 里写的,必须通过 HTTP 响应头设置;Cross-Origin-Resource-Policy 头只对服务器返回的资源生效,<meta> 标签完全无效。
为什么不能用 或 inline script 设置 CORP
浏览器在解析 HTML 之前就已决定是否加载某个跨源资源(比如 <img src="https://cdn.example.com/logo.png" alt="html怎么创建CORP资源策略_html CORP Cross-Origin-Resource-Policy" >),此时 <meta http-equiv> 还没被读取。CORP 是一个**强制性响应级策略**,必须由服务器在返回该资源时通过 HTTP header 明确声明。
常见错误包括:
- 在 HTML 中写
<meta http-equiv="Cross-Origin-Resource-Policy" content="same-origin">→ 浏览器直接忽略 - 用 JS 动态设置
document.responseHeaders→ 该 API 不存在,且时机早已错过 - 只给主 HTML 页面加 CORP → 对图片、字体等子资源毫无作用,它们各自响应头才管用
Apache 下用 mod_headers 正确设置 CORP
确保 mod_headers 已启用(检查 httpd.conf 或 apache2.conf 中 LoadModule headers_module modules/mod_headers.so 未被注释),然后在虚拟主机或 <directory></directory> 块中添加:
立即学习“前端免费学习笔记(深入)”;
Header always set Cross-Origin-Resource-Policy "same-site"
注意:
-
same-site允许https://a.example.com加载https://example.com/logo.png(协议+主域名相同) -
same-origin要求端口也一致,https://example.com:8080加载https://example.com的资源也会被拒 -
cross-origin表示“谁都能嵌”,但若页面启用了Cross-Origin-Embedder-Policy: require-corp,它反而是唯一被接受的值 -
always关键字很重要:避免因内部重定向或 304 响应导致头丢失
CORP 和 crossorigin 属性不是一回事
crossorigin 是 HTML 标签上的属性,只影响浏览器如何加载该资源(是否走 CORS 流程、是否带凭据);而 Cross-Origin-Resource-Policy 是服务器告诉浏览器“别人能不能加载我”。两者常共存,但目的和作用域完全不同。
典型组合场景:
-
<img src="https://cdn.example.com/photo.jpg" crossorigin="anonymous" alt="html怎么创建CORP资源策略_html CORP Cross-Origin-Resource-Policy" >→ 前端声明要跨域加载图片并读像素 - CDN 必须返回:
Access-Control-Allow-Origin: *(CORS)且Cross-Origin-Resource-Policy: cross-origin(CORP) - 若只配 CORS 没配 CORP,而主页面又开了
require-corp,图片仍会失败并报net::ERR_BLOCKED_BY_RESPONSE
验证 CORP 是否生效的三个硬指标
别只看 Network 面板里有没有那个 header——得看它是否被浏览器真正执行:
- 打开 DevTools → Network → 找到目标资源(如
logo.png)→ Headers → Response Headers → 确认存在Cross-Origin-Resource-Policy且值合法(same-site/same-origin/cross-origin) - 如果该资源被跨源页面加载,且 CORP 值为
same-origin,但请求来源是https://sub.example.com,则加载失败,控制台显示Blocked by Cross-Origin-Resource-Policy - 若页面同时设置了
Cross-Origin-Embedder-Policy: require-corp,所有跨源子资源都必须返回Cross-Origin-Resource-Policy: cross-origin,缺一不可——哪怕只漏一张字体文件,self.crossOriginIsolated就是false
最易被忽略的是:CORP 值大小写敏感,拼错一个字母(如 Same-Site)等同于未设置;CDN 类服务默认不返回该头,必须主动配置,不能指望它“自动兼容”。


















