参考资料

  1. CacheKey 配置方案。你可以直接对照界面逐项设置
  2. OCSP Stapling 功能可实现由 ESA 预先缓存在线证书验证结果并下发给客户端,无需浏览器直接向 CA 站点查询证书状态,从而减少用户验证时间。
  3. 阿里云 ESA(边缘安全加速)的“托管 DCV”功能。
  4. 在 ESA 配置了“自定义缓存标签名称”(比如改成 ESA-Cache-Tag),源站就必须同步改用这个新标头名。
  5. _acme-challenge.madama.cnDNS 直接解析madama.cn.118555529491327488.dcv.aliyun-esa.com,申请失败
  6. "GET" "POST" "PUT" "DELETE" "PURGE" "HEAD" "OPTIONS" "PATCH"})
  7. HTTP/2 和 HTTP/3 是给访客用的,HTTP/2 回源是给源站用的
  8. “边缘缓存层 + 智能缓存层”是阿里云 ESA 多级缓存的一种双层架构

导致 net::err_blocked_by_response 的直接原因

你贴出的这段配置,正是导致 net::err_blocked_by_response 的直接原因。

这份配置具体做了什么?

这段 JSON 定义了名为 SecureResponseHeaders 的规则,它会在 ESA 返回给浏览器的响应中添加四个安全头:

  • X-Frame-Options: DENY:最严格的反点击劫持设置。它禁止你的页面被任何页面(包括你自己的域名)通过 <iframe> 嵌入。如果你的网站本身使用了 iframe 来加载站内页面,或者被其他合法站点嵌入,就会直接失败。

  • Cross-Origin-Embedder-Policy: require-corp:这是最可能导致页面无法打开的头。它强制要求页面上加载的每一个跨域资源(例如来自其他域名的图片、CSS、字体、统计脚本)都必须明确地“同意”被嵌入。

  • Cross-Origin-Resource-Policy: same-origin:配合上面的 COEP 头。它告诉浏览器,你的资源只允许被同源页面加载。这本身没问题,但如果页面里引用了任何外部资源,而这些资源没有正确声明 CORP,就会被 COEP 拦截。

  • X-Content-Type-Options: nosniff:相对无害。它只是要求浏览器严格遵守声明的文件类型,通常不会导致页面加载失败。

核心问题在于:一旦设置了 Cross-Origin-Embedder-Policy: require-corp,浏览器就会变得非常“挑剔”。你页面上任何一个来自其他域名的资源(比如阿里云 OSS 的图片、第三方统计代码、外部字体等),如果对方的服务器响应里没有包含 Cross-Origin-Resource-Policy: cross-origin 或者正确的 CORS 头,浏览器就会直接拒绝加载这个资源,并抛出 net::err_blocked_by_response 或 ERR_BLOCKED_BY_RESPONSE.NotSameOriginAfterDefaultedToSameOriginByCoep 错误。

如何快速验证与解决?

要确认是不是这个规则引起的,最快的办法就是临时关闭它。

  1. 临时测试:在 ESA 控制台,找到这条 SecureResponseHeaders 规则,将其 "Rule" 的值从 "true" 临时改为 "false",或者直接禁用这条规则。然后强制刷新浏览器(Ctrl + Shift + R)。

  2. 观察结果:如果页面恢复正常,那就百分之百是这个规则导致的。

如果确认是它,怎么调整?

你不需要完全放弃安全防护,可以有几种选择:

  • 最安全但最麻烦的方案:保留 COEP: require-corp。然后去检查你页面里引用的所有外部资源,确保它们的响应头里都包含了合适的 Cross-Origin-Resource-Policy。或者,把这些外部资源(如图片、脚本)全部下载到你自己的服务器上,变成同源资源。

  • 折中方案:把 Cross-Origin-Embedder-Policy 的值从 require-corp 改成 credentialless。这个模式稍微宽松一些,允许加载没有 CORP 头的跨域资源,但会以“匿名”方式请求(不带 Cookie)。

  • 最省事的方案:如果网站本身没有特殊的隔离需求(比如用 SharedArrayBuffer),直接删除 Cross-Origin-Embedder-Policy 和 Cross-Origin-Resource-Policy 这两个头。保留 X-Frame-Options(但根据你的嵌入需求调整值,比如改成 SAMEORIGIN)和 X-Content-Type-Options,通常就足够了。

建议你先临时禁用规则,确认页面能打开后,再根据你网站对外部资源的依赖情况,选择上述调整方案。

作者:王壹杰
时间:2026-09-28 22:36:50
来源:https://yun.ciilii.com/