Javascript 内容安全策略、Next JS和AMP存在问题
我正在使用Next JS开发一个AMP应用程序,它在localhost中工作得很好,但在生产中,我遇到了来自AMP的错误,不允许加载其工作人员 初始错误为: 拒绝从“blob:”创建工作进程,因为它违反了以下内容安全策略指令:“default src*data:“unsafe eval”“unsafe inline”。请注意,未显式设置“worker src”,因此使用“default src”作为回退 好的,我理解这个错误,我可以看到next JS默认发送的头是Javascript 内容安全策略、Next JS和AMP存在问题,javascript,next.js,amp-html,content-security-policy,Javascript,Next.js,Amp Html,Content Security Policy,我正在使用Next JS开发一个AMP应用程序,它在localhost中工作得很好,但在生产中,我遇到了来自AMP的错误,不允许加载其工作人员 初始错误为: 拒绝从“blob:”创建工作进程,因为它违反了以下内容安全策略指令:“default src*data:“unsafe eval”“unsafe inline”。请注意,未显式设置“worker src”,因此使用“default src”作为回退 好的,我理解这个错误,我可以看到next JS默认发送的头是default src*data
default src*data:“unsafe eval”“unsafe inline”
,它不允许加载blob:
,因此浏览器拒绝加载AMP的脚本
因此,我在next.config.js
中添加了一个标题(我使用的是具有此新功能的next 9.5),以允许工人使用blob:
async function headers() {
return [
{
source: "/",
headers: [
{
key: "Content-Security-Policy",
value: "default-src * data: 'unsafe-eval' 'unsafe-inline'; worker-src blob:;",
},
],
}
];
}
通过这种配置,我可以看到响应中正确添加了头,但现在有两个头,默认情况下nextJS仍在发送他的头:
现在我在响应中有两个头,第一个是我的,定义了worker src,第二个是下一个JS默认头,不定义worker src。我希望浏览器能够理解它,但它不起作用,我仍然有相同的错误,浏览器没有接受我的工作者src策略 注意:我不能使用标记
,因为它是无效的
注2:Worker仅由一些AMP组件加载,我认为主要的是AMP绑定和AMP脚本。有很多组件,我没有这个问题
有人能解决这个问题吗
非常感谢您的阅读。对于多个CSP,浏览器将只允许所有CSP中允许的内容。默认的下一个JS CSP将阻止blob,即使您的自定义CSP允许。您可能需要删除其中一个CSP并修改另一个以满足您的需要
另请参见中的“多内容安全策略”部分。对于多个CSP,浏览器将只允许所有CSP中允许的内容。默认的下一个JS CSP将阻止blob,即使您的自定义CSP允许。您可能需要删除其中一个CSP并修改另一个以满足您的需要
另请参见中的“多内容安全策略”部分,移除
头盔
npm包后,所有内容都可以正常工作。移除头盔
npm包后,所有内容都可以正常工作。谢谢,我遗漏了此信息,我以为CSP会彼此完成,但当指令相同时,使用了最严格的限制。我想我错了,你有解释这一点的文档吗?在答案中添加一个参考。谢谢你,我错过了这个信息,我认为CSP会互相完成,但当指令相同时,使用的是最严格的限制。我猜我错了,你有解释这一点的文档吗?在答案中添加一个参考。