Javascript 加载脚本和清单违反了内容安全策略指令
我正在尝试开发一个渐进式Web应用程序,它包括一个外部JavaScript、一个外部CSS、JQuery库以及清单和服务工作者 我设置了内容安全策略来加载这些内容,并在localhost和Google Chrome上运行它 这是我的HTML头:Javascript 加载脚本和清单违反了内容安全策略指令,javascript,html,content-security-policy,Javascript,Html,Content Security Policy,我正在尝试开发一个渐进式Web应用程序,它包括一个外部JavaScript、一个外部CSS、JQuery库以及清单和服务工作者 我设置了内容安全策略来加载这些内容,并在localhost和Google Chrome上运行它 这是我的HTML头: <head> <meta charset="UTF-8"/> <meta http-equiv="Content-Security-Policy" content="default-src 'self'; s
<head>
<meta charset="UTF-8"/>
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' 'unsafe-inline' https://*; manifest-src 'self'">
<script src="example.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>
<!-- <script src="jquery.min.js"></script> -->
<link rel="stylesheet" type="text/css" href="example.css">
<link rel="manifest" href="manifest.json">
<script>
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('sw.js').then(function(registration) {
console.log('Service worker successfully installed. Scope:', registration.scope);
}).catch(function(error) {
console.log('Service worker installation failed:', error);
});
}
</script>
<link rel="icon" href="../images/favicon.ico" type="image/x-icon" />
<title>xxx</title>
</head>
if(导航器中的“serviceWorker”){
navigator.serviceWorker.register('sw.js')。然后(函数(注册){
console.log('已成功安装服务工作程序。作用域:',registration.Scope);
}).catch(函数(错误){
console.log('Service worker安装失败:',错误);
});
}
xxx
我希望一切都能正常运行,但相反,我得到的错误与我的声明不符:
拒绝加载脚本“”,因为它违反了以下内容安全策略指令:“script src‘self’”。请注意,未显式设置“script src elem”,因此将“script src”用作回退
拒绝执行内联脚本,因为它违反了以下内容安全策略指令:“script src‘self’”。启用内联执行需要'unsafe inline'关键字、哈希('xxx')或nonce('nonce-…')
拒绝从“”加载清单,因为它违反了以下内容安全策略指令:“default src‘none’”。请注意,“manifest src”未显式设置,因此“default src”用作回退
即使我包含了'unsafe inline'关键字,启用了从https加载脚本,并且我没有声明“default src'none'”,所以我认为我遗漏了一些东西。什么阻止了我的脚本加载
编辑我知道出了什么问题:服务器运行在libwebsockets上,默认情况下,libwebsockets使用非常严格的内容安全策略。更改lws选项后,CSP指令将从HTML头正确加载。指定了CSP指令的源 引述上述来源: 站点地址可能包含可选的前导通配符(星号“*”) 但是,这仍然需要有效的站点地址。因此,
https://*
不是有效的CSP源,因此被忽略
要允许从所有https站点加载脚本,请执行以下操作:
这里的答案有用吗?@RBrill谢谢你的回答。我已经尝试了所有张贴在那里的解决方案,但我总是得到相同的错误