我有一个网站,当我添加
<meta http-equiv="Content-Security-Policy" content="default-src 'self'">
到 index.html 的头部。
经过一段时间的调试后,我意识到,当存在此元标记时,所有 javascript 源代码都会按顺序加载。当我删除这个标签时,javascript 是并行加载的,所以网站加载速度更快。
为了重现这一点,我写了这个小示例 html 文件:
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
<meta http-equiv="Content-Security-Policy" content="default-src 'self'">
</head>
<body>
Hello World
<script src="angular.js"></script>
<script src="angular-animate.js"></script>
<script src="angular-touch.js"></script>
</body>
</html>
这是带有“Content-Security-Policy”元标记的网络时间线:
可以看出,资源是按顺序加载的。
这是我删除“Content-Security-Policy”标签时的网络时间线。
正如预期的那样,Javascript 资源在这里是并行加载的,即使是小示例,页面加载速度也快得多。
对于这种行为有什么解释吗? 我如何才能两全其美:并行加载 Javascript 文件同时激活“Content-Security-Policy”?
所有测试均使用当时最新的 Chrome(50.0.2661.75(64 位))完成。 Safari 和 Firefox 都没有表现出相同的奇怪行为,它们都同时加载 javascripts 并激活了“Content-Security-Policy”。
最佳答案
这在使用 MAC 时不可重现
Chrome 49.0.2623.110 (64-bit)
Chrome 50.0.2661.75 (64-bit)
两个浏览器都在几毫秒内从本地主机提供这三个文件,同时关闭缓存。
我也在远程服务器上尝试过这个,即不是本地主机,两者都变慢了,但所有文件都是并行加载的,即我看不出打开或关闭 CSP 的情况有什么不同。
我相信 Mozilla 已将 C++ 用于 CSP,但那是几年前的事了,它不会影响 Chrome。
关于javascript - 为什么 Content-Security-Policy 会强制 Chrome 按顺序加载 Javascript?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36656389/