以S3网站为原点的CloudFront不提供gzip压缩文件

时间:2016-02-23 23:51:04

标签: amazon-web-services amazon-s3 gzip amazon-cloudfront

AWS now supports gzipping files through CloudFront

我已按照Serving Compressed Files中的所有说明进行操作,但gzipping无效。

我将S3存储桶设置为CloudFront用作网站的网站。

  • Compress Objects Automatically已启用
  • 我正在使用正确的内容类型提供文件,例如application/javascripttext/css
  • 文件在1,000和10,000,000字节
  • 之内
  • 据我所知,S3网站提供Content-Length的文件
  • 为了确保没有缓存任何内容,我将整个S3存储桶无效并将更新版本的文件上传到S3。
  • 此外,我使用的网络浏览器Chrome也接受gzip压缩文件。

尽管如此,我还是无法工作。我已经完成了包括SSL完美工作在内的所有其他工作,您可以访问以下网站:https://formulagrid.com/

如果打开chrome控制台,您会注意到从S3提供的文件都没有被gzip压缩。唯一的gzip压缩文件,如谷歌字体,是我从其他CDN中抓取的。

4 个答案:

答案 0 :(得分:27)

我今天遇到了同样的错误,并通过向S3存储桶添加CORS规则来解决它。此规则可确保将Content-Length标头发送到Cloudfront,以便可以对内容进行gzip压缩:

S3>铲斗>权限> CORS配置

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <MaxAgeSeconds>3000</MaxAgeSeconds>
        <AllowedHeader>Authorization</AllowedHeader>
        <AllowedHeader>Content-Length</AllowedHeader>
    </CORSRule>
</CORSConfiguration>

归功于Robert Ellison:http://ithoughthecamewithyou.com/post/enable-gzip-compression-for-amazon-s3-hosted-website-in-cloudfront

据我所知,这似乎是一项无证件的要求。

答案 1 :(得分:3)

由于 Cloudfront 现在只接受 JSON,您必须粘贴此内容:

[
    {
        "AllowedHeaders": [
            "Authorization",
            "Content-Length"
        ],
        "AllowedMethods": [
            "GET"
        ],
        "AllowedOrigins": [
            "*"
        ],
        "ExposeHeaders": [],
        "MaxAgeSeconds": 3000
    }
]

答案 2 :(得分:2)

我的问题是我专门使用utf-8编码上传文件。从文档中:

CloudFront确定文件是否可压缩:

文件必须是CloudFront压缩的类型。

文件大小必须在1,000到10,000,000字节之间。

响应必须包含Content-Length标头,以便CloudFront可以 确定文件的大小是否在CloudFront的范围内 压缩。如果缺少Content-Length标头,CloudFront将不会 压缩文件。

响应中不得包含Content-Encoding标头

答案 3 :(得分:0)

我已经尝试了上述所有方法,但 CloudFront 仍然没有压缩我的 S3 存储桶内容。

我的问题是,我已经有一个禁用压缩的现有 Cloudfront 发行版,后来我将其打开。这以某种方式不允许考虑压缩。在尝试了很多不成功的解决方法之后,我删除了 CloudFront 分发版,并从一开始就通过压缩重新创建了它。这解决了我的问题。