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

m0m*_*eni 22 gzip amazon-s3 amazon-web-services amazon-cloudfront

AWS现在支持通过CloudFront gzipping文件

我已经按照服务压缩文件中的所有说明进行操作,但是gzipping不起作用.

我将一个S3存储桶设置为CloudFront用作源的网站.

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

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

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

Rod*_*igo 33

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

S3> Bucket>权限> 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>
Run Code Online (Sandbox Code Playgroud)

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

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

  • *注*:Content-Length在上面的源代码示例中拼写错误(因为编辑少于6个字符,所以不会让我修复它). (3认同)

dom*_*dom 7

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

CloudFront 确定文件是否可压缩:

文件必须属于 CloudFront 压缩的类型。

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

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

响应不得包含 Content-Encoding 标头

  • 谢谢,这是一个非常有帮助的答案。 (2认同)

Leo*_*aun 5

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

[
    {
        "AllowedHeaders": [
            "Authorization",
            "Content-Length"
        ],
        "AllowedMethods": [
            "GET"
        ],
        "AllowedOrigins": [
            "*"
        ],
        "ExposeHeaders": [],
        "MaxAgeSeconds": 3000
    }
]
Run Code Online (Sandbox Code Playgroud)