使用Content-Encoding需要注意的事项:gzip

时间:2012-08-28 15:08:44

标签: http browser amazon-s3 gzip

我创建了一个托管在S3 Bucket上的静态网站。我的资产文件(css和js文件)被缩小并用gzip压缩。文件名本身为file_gz.jsfile_gz.css,并附带Content-Encoding: gzip标题。

到目前为止,我已经在各种浏览器上测试了网站,它运行正常。资产以压缩版本提供,页面看起来没有任何不同。

我看到的唯一问题是,由于这是一个S3存储桶,因此当客户端(浏览器)不支持gzip编码时,没有故障保护。相反,HTTP请求将失败,并且不会对页面应用样式或javascript增强。

通过设置Content-Encoding: gzip,是否有人知道任何问题?所有浏览器都支持这个吗?我需要附加任何其他标题才能使其正常工作吗?

2 个答案:

答案 0 :(得分:13)

现代浏览器几乎全面支持编码内容。但是,假设所有用户代理都会这样做是不安全的。您的实现问题是它完全忽略了HTTP的内置方法来避免这个问题:内容协商。你有几个选择:

  1. 您可以继续关注此问题,并希望访问您的内容的每个用户代理都能够解码您的gzip资源。不幸的是,几乎肯定不会是这种情况;浏览器不是那里唯一的用户代理,解决问题的“一刀切”方法很少是一个好主意。

  2. 实施解决方案以协商您是否使用Accept-Encoding标头提供gzip压缩响应。如果客户端根本没有指定此标头或指定它但未提及gzip,则可以相当确定用户将无法解码gzip压缩响应。在这些情况下,您需要发送未压缩的版本。

  3. 内容协商的细节超出了本答复的范围。您需要对如何解析Accept-Encoding标头并协商响应的编码进行一些研究。通常,内容编码是通过使用Apache的mod_deflate等第三方模块来完成的。虽然我不熟悉S3在这方面的选择,但我怀疑你需要自己实施谈判。

    总结:发送编码内容而不先用客户端清除它不是一个好主意。

答案 1 :(得分:1)

  1. 你有CSS / minfied CSS(example.css [247 kb])。
  2. 使用cmd gzip -9 example.css和隐蔽文件将类似于example.css.gz [44 kb]。
  3. 将文件example.css.gz重命名为example.css
  4. 将文件上传到S3存储桶,然后在属性中单击元数据。
  5. 添加新的元数据标记,选择Context-Encoding和值gzip
  6. 现在你的CSS将被缩小,并且还会gzip。
  7. 源: http://www.rightbrainnetworks.com/blog/serving-compressed-gzipped-static-files-from-amazon-s3-or-cloudfront/