AWS S3 图像仅通过 HTTP 提供,但 Chrome 升级到 HTTPS
AWS S3 images served only via HTTP, but Chrome upgrades to HTTPS
我无法使 S3 图像托管通过 HTTPS 工作。我读到 “Amazon S3 网站端点不支持 HTTPS。” - docs
我可以通过 HTTP 托管我的图像,但是,当我将以下标记放入 HTML:
<img src="http://MY-BUCKET-NAME.s3-website.eu-central-1.amazonaws.com/images/51612809-741c-40c7-8c29-7b332be709d7.jpg">
Chrome 请求
https://MY-BUCKET-NAME.s3-website.eu-central-1.amazonaws.com/images/c1612a09-741c-40c6-8c29-7b332be709d7.jpg
(注意http
变成了https
),结果是ERR_CONECTION_TIMED_OUT
.
如何让它发挥作用?
正如我们在评论中讨论的那样,Chrome doesn't like mixed content anymore,即它不会让您在通过 https
.
提供服务的网站上嵌入 http
内容
现在有多个选项可以使这项工作生效:
将主网站降级到 http
(不要这样做,这是个糟糕的主意)
- 使存储桶或至少嵌入的对象在 S3 中可公开读取,并使用 S3 提供的本机
https
端点。它看起来像这样:
https://<bucketname>.s3.<region>.amazonaws.com/<object-key>.jpg
这与您当前的解决方案具有基本相同的相关成本。不过,您可能需要做一些烦人的 CORS 工作。
- 在您的存储桶前面设置一个 CloudFront 分配并将其配置为提供来自 S3 的内容。您可以使用源访问身份来保护 CloudFront 和 S3 之间的通信,甚至可以在 CloudFront 中自定义 TLS 配置。这将使您的缓存更接近您的用户,但会产生额外费用。
我无法使 S3 图像托管通过 HTTPS 工作。我读到 “Amazon S3 网站端点不支持 HTTPS。” - docs
我可以通过 HTTP 托管我的图像,但是,当我将以下标记放入 HTML:
<img src="http://MY-BUCKET-NAME.s3-website.eu-central-1.amazonaws.com/images/51612809-741c-40c7-8c29-7b332be709d7.jpg">
Chrome 请求
https://MY-BUCKET-NAME.s3-website.eu-central-1.amazonaws.com/images/c1612a09-741c-40c6-8c29-7b332be709d7.jpg
(注意http
变成了https
),结果是ERR_CONECTION_TIMED_OUT
.
如何让它发挥作用?
正如我们在评论中讨论的那样,Chrome doesn't like mixed content anymore,即它不会让您在通过 https
.
http
内容
现在有多个选项可以使这项工作生效:
将主网站降级到(不要这样做,这是个糟糕的主意)http
- 使存储桶或至少嵌入的对象在 S3 中可公开读取,并使用 S3 提供的本机
https
端点。它看起来像这样:
这与您当前的解决方案具有基本相同的相关成本。不过,您可能需要做一些烦人的 CORS 工作。https://<bucketname>.s3.<region>.amazonaws.com/<object-key>.jpg
- 在您的存储桶前面设置一个 CloudFront 分配并将其配置为提供来自 S3 的内容。您可以使用源访问身份来保护 CloudFront 和 S3 之间的通信,甚至可以在 CloudFront 中自定义 TLS 配置。这将使您的缓存更接近您的用户,但会产生额外费用。