Amazon CloudFront 上的 Gzip 压缩问题

Amazon CloudFront 上的 Gzip 压缩问题

我有一个以 S3 为源配置的 CloudFront 分发版。

我已按照 Amazon 指南启用“自动压缩对象”。等待分发状态显示“在线”,然后使所有文件无效。

我的回复标头是:

Age:5
Connection:keep-alive
Content-Length:232359
Content-Type:application/javascript
Date:Sat, 03 Mar 2018 15:39:10 GMT
Last-Modified:Sat, 03 Mar 2018 15:37:32 GMT
Server:AmazonS3
Vary:Accept-Encoding
Via:1.1 4dbdc57755819d1a0ec1defc2630d677.cloudfront.net (CloudFront)
X-Amz-Cf-Id:6eHPWzOXv2J6kIvzuieoI9chtPBBvEvJFH9fb3yMwHvvcMZ4xsigCA==
X-Cache:Hit from cloudfront

请求标头:

Accept:*/*
Accept-Encoding:gzip, deflate, br
Accept-Language:en-GB,en;q=0.9,en-US;q=0.8,pl;q=0.7,zh;q=0.6
Cache-Control:no-cache
Connection:keep-alive
Host:d2h5tcpn9r8alm.cloudfront.net
Pragma:no-cache
Referer:https://noru.co.uk/
User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36

它有“内容长度”和支持的“内容类型”,我错过了什么?我快疯了……

从那时起,我按照上面描述的步骤创建了一个新的 s3 存储桶和新的分发,但选择了不同的存储桶位置(以防万一产生影响),以下是分发的常规设置:

Delivery Method Web
Cookie Logging  Off
Distribution Status Deployed
Comment -
Price Class Use All Edge Locations (Best Performance)
AWS WAF Web ACL -
State   Enabled
Alternate Domain Names (CNAMEs) -
SSL Certificate Default CloudFront Certificate (*.cloudfront.net)
Domain Name d189ud9v76clu1.cloudfront.net
Custom SSL Client Support   -
Security Policy TLSv1
Supported HTTP Versions HTTP/2, HTTP/1.1, HTTP/1.0
IPv6    Enabled
Default Root Object -
Last Modified   2018-03-03 15:46 UTC
Log Bucket

和行为: 分配行为

我仍然无法让 gzip 工作,这是新文件: http://d189ud9v76clu1.cloudfront.net/app.min.js

答案1

您的请求是否包含必要的Accept-Encoding: gzip标头?

您的标题看起来像 curl 输出,默认情况下不会发送该标题。

您可以通过以下方式使用 curl 测试 gzip 编码:curl -H "Accept-Encoding: gzip" https://example.com/asset.js"

答案2

我会看看是否能总结一下发生在我身上的事情,也许这会对某些人有所帮助。

是否对 S3 进行了初始设置。设置了 CORS,但未添加 Content-Length。是否对 CloudFront 进行了初始设置。未检查压缩。

一切都部署好了。

在域上运行 GTMetrix 测试并获取 gzip 的 F。

回去谷歌搜索如何让它工作。意识到我需要 Content-Length 标头<AllowedHeader>Content-Length</AllowedHeader>,并意识到我需要返回 CloudFront 并检查 Distribution 上的压缩。

但是……您还需要使缓存无效。基本上所有资产都返回 304(未修改)。因此您将无法获得经过 gzip 压缩的资产。

分发、编辑、无效、创建*并执行。

希望能帮助到你。

答案3

之后我付费让 AWS 帮助台帮我解决了这个问题,以下是他们的回复:

我确实理解,因为这可能会令人沮丧,无法使用开发人员工具查看对配置所做的更改。

从在线文档中,我确实确认它可能有点令人困惑,我将进行反馈请求以对文档进行一些更改,在您的情况下,它是更多的性能变化,如果您查看 Chrome 浏览器的底部,开发人员工具下的网络选项,您将看到您的页面性能如何受到 gzip 压缩的影响。

要通过浏览器查看配置,另一个选项与您在“curl”命令输出中获得的相同,即从任何浏览器查看开发人员工具中的响应标头。

您可以进入开发人员工具 -> 选择网络来找到它:* 当您看到所有资源链接时,单击顶部链接域名“noru.co.uk”。 * 这将打开您的标头,它将提供与 curl 命令相同的输出,例如:

接受范围:字节

Alt-Svc:quic=":443";ma=2592000;v="35,37,38,39"

缓存控制:无存储、无缓存、必须重新验证、后检查=0、预检查=0

内容编码:gzip

内容长度:3152

内容类型:text/html;字符集=utf-8

日期:2018 年 3 月 20 日星期二 06:37:04 GMT

Etag:“7073226-1521527798;gz”

到期时间:1981 年 11 月 19 日星期四 08:52:00 GMT

指令:无缓存

服务器:LiteSpeed

变化:接受编码

X-Firefox-Spdy:h2

字符集:utf-8

x-litespeed-cache:命中,私有

x-powered-by: Craft CMS

这将为您提供该域的网页配置的大部分信息。

我希望这会有所帮助,如果您有任何其他疑虑,请随时与我们联系,我很乐意为您提供进一步的帮助。

相关内容