Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 内容安全策略、Next JS和AMP存在问题_Javascript_Next.js_Amp Html_Content Security Policy - Fatal编程技术网

Javascript 内容安全策略、Next JS和AMP存在问题

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

我正在使用Next JS开发一个AMP应用程序,它在localhost中工作得很好,但在生产中,我遇到了来自AMP的错误,不允许加载其工作人员

初始错误为:

拒绝从“blob:”创建工作进程,因为它违反了以下内容安全策略指令:“default src*data:“unsafe eval”“unsafe inline”。请注意,未显式设置“worker src”,因此使用“default src”作为回退

好的,我理解这个错误,我可以看到next JS默认发送的头是
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会互相完成,但当指令相同时,使用的是最严格的限制。我猜我错了,你有解释这一点的文档吗?在答案中添加一个参考。