Cross-Origin-Opener-Policy 设置后页面打不开怎么回事?

南宫熙然 阅读 11

我在 Nginx 里加了 Cross-Origin-Opener-Policy: same-origin,结果页面直接白屏了,控制台报错说“Blocked by COOP”。我就是想防止别人用 window.open 引用我的页面,但自己站内跳转也挂了,这咋整?

我试过改成 unsafe-none 能正常打开,但这样就没防护作用了。是不是我理解错了这个头的用法?

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>测试页面</title>
</head>
<body>
  <button onclick="window.open('/other.html')">打开新页</button>
</body>
</html>
我来解答 赞 6 收藏
二维码
手机扫码查看
1 条解答
IT人梓奥
问题在于 same-origin 会把 window.open 打开的同源页面也当成跨域关系拦掉。

解决方案:改成 Cross-Origin-Opener-Policy: same-origin-allow-popups,这样同源页面通过 window.open 打开的可以继续通信,同时跨域的 opener 引用还是会被阻断。

Nginx 配置:

add_header Cross-Origin-Opener-Policy "same-origin-allow-popups" always;


如果你只需要保护某些敏感页面,可以只给那些页面加这个头,其他页面该咋用咋用。
点赞 1
2026-03-12 12:36