【发布时间】:2021-12-07 07:58:44
【问题描述】:
我正在尝试加载保存在 AWS S3 中的网页,并使用 Cloudfront 从我的域中加载它。我收到以下错误消息:
Refused to load media from 'https://www.example.com/video.mp4' because it violates the following Content Security Policy directive: "default-src 'none'". Note that 'media-src' was not explicitly set, so 'default-src' is used as a fallback.
我在页面中有以下标题,可以通过浏览器查看
<meta content="text/html;charset=utf-8" http-equiv="Content-Type">
<meta content="utf-8" http-equiv="encoding">
<meta http-equiv="Content-Security-Policy" content="default-src 'self'">
<html>
<!-- <script src="screen.js"></script> -->
似乎 Content-Security-Policy 被忽略了?
我在 Chrome 和 Firefox 中收到相同的错误。
【问题讨论】:
-
我设法让它工作,但我不确定为什么。我相信有一个 lambda@edge 函数覆盖了标题。这可以在 Cloudfront>Distributions>...>Behaviour -> Function associations 下找到。去掉之后,找不到lamda@edge函数,所以无法验证是不是问题。
-
原因在于
lambda@edge函数 - 它没有覆盖您的元标记,而是通过 HTTP 标头添加第二个 CSP。对于 2 个 CSP,两个策略中最严格的规则都适用,因此元标记中的 CSP 无法缓解lambda@edge发布的 CSP。您应该使用以下两种方式之一:元标记或lambda@edge函数来传递策略。
标签: html amazon-s3 amazon-cloudfront content-security-policy