我创建了一个托管在S3 Bucket上的静态网站。我的资产文件(css和js文件)被缩小并用gzip压缩。文件名本身也是 file_gz.js
要么 file_gz.css
并随附一份 Content-Encoding: gzip
头。
到目前为止,我已经在各种浏览器上测试了网站,它运行正常。资产以压缩版本提供,页面看起来没有任何不同。
我看到的唯一问题是,由于这是一个S3存储桶,因此当客户端(浏览器)不支持gzip编码时,没有故障保护。相反,HTTP请求将失败,并且不会对页面应用样式或javascript增强功能。
有没有人通过设置知道任何问题 Content-Encoding: gzip
?所有浏览器都支持这个吗?我需要附加任何其他标题才能使其正常工作吗?
现代浏览器几乎全面支持编码内容。但是,假设所有用户代理都会这样做是不安全的。您的实现的问题是它完全忽略了HTTP的内置方法来避免这个问题: 内容谈判。你有几个选择:
你可以继续关注这个问题并希望如此 一切 访问您的内容的用户代理将能够解码您的gzip资源。不幸的是,这几乎肯定不是这样的;浏览器不是那里唯一的用户代理,解决问题的“一刀切”方法很少是个好主意。
实施解决方案,以协商您是否使用.z提供gzipped响应 Accept-Encoding
头。如果客户端根本没有指定此标头或指定它但未提及gzip,则可以相当确定用户将无法解码gzip压缩响应。在这些情况下,您需要发送未压缩的版本。
内容协商的来龙去脉超出了这个答案的范围。你需要做一些关于如何解析的研究 Accept-Encoding
标题并协商您的回复的编码。通常,内容编码是通过使用Apache的mod_deflate等第三方模块来完成的。虽然我不熟悉S3在这方面的选择,但我怀疑你需要自己实施谈判。
综上所述: 发送编码内容而不先用客户端清除它不是一个好主意。
- 你有CSS / minfied CSS(
example.css
[247 kb])。
- 使用cmd
gzip -9 example.css
和秘密文件会像 example.css.gz
[44 kb]。
- 重命名文件
example.css.gz
至 example.css
。
- 将文件上传到S3存储桶,然后在属性中单击元数据。
- 添加新的元数据标签,选择
Context-Encoding
和价值 gzip
。
- 现在你的CSS将被缩小并且还会缩小gzip。
资源:
http://www.rightbrainnetworks.com/blog/serving-compressed-gzipped-static-files-from-amazon-s3-or-cloudfront/