Safari 似乎不支持用于预加载 JS 的 link 标签上的 CSP 随机数

Safari seems to not support CSP nonces on link tags being used to preload JS

我在 Mac 上使用 Safari 14.0.3,并呈现以下 link 标签:

<link rel="preload" href="/_next/static/chunks/194.js?ts=1619710448027" as="script" nonce="Hkb65_tcgqVrk2Zk">

我的 CSP header 包括以下内容:

script-src 'strict-dynamic' 'unsafe-eval' 'nonce-Hkb65_tcgqVrk2Zk';

如您所见,已将正确的随机数应用于 link 标记。这在 Chrome 和 FF 中正常工作,但 Safari 抛出错误:

[Error] [Report Only] Refused to load https://dev.example.com:4200/_next/static/chunks/194.js?ts=1619710448027 because it does not appear in the script-src directive of the Content Security Policy.

我无法在网上找到任何关于 Safari 不支持 link 标签上的随机数的信息。希望有人能告诉我如何解决这个问题,或者给我指出至少可以确认这是不可能的资源。

是的,Safari 不支持 'nonce-value'<link rel="preload" 结构。顺便说一句,Firefox 浏览器 - 即使没有 'nonce-value',它也允许预加载资源。只有 Chrome 支持预加载脚本和样式中的随机数。

您不必担心 'self' 令牌的使用 - 它 is cancelled 在 CSP3 浏览器(现代 Chrome 和 Firefox)中与 'strict-dynamic' 令牌配对时。因此 'self' 仅适用于不支持 'strict-dynamic'.
的 Safari 我认为您找到了一个很好的解决问题的决定 - 在浏览器向后兼容模式下使用 CSP。