11

I've created a static website that is hosted on a S3 Bucket. My asset files (css and js files) are minified and compressed with gzip. The filename itself is either file_gz.js or file_gz.css and is delivered with a Content-Encoding: gzip header.

So far, I've tested out the website on various browsers and it works fine. The assets are delivered with their compressed versions and the page doesn't look any different.

The only issue that I see is that since this is a S3 bucket, there is no failsafe for when the the client (the browser) doesn't support the gzip encoding. Instead the HTTP request will fail and there will be no styling or javascript-enhancements applied to the page.

Does anyone know of any problems by setting Content-Encoding: gzip? Do all browsers support this properly? Are there any other headers that I need to append to make this work properly?

4

2 回答 2

13

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

  1. 您可以继续对问题视而不见,并希望每个访问您的内容的用户代理都能够解码您的 gzip 资源。不幸的是,几乎可以肯定情况并非如此。浏览器并不是唯一的用户代理,解决问题的“头脑风暴”方法很少是一个好主意。

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

内容协商的来龙去脉超出了这个答案的范围。您需要对如何解析Accept-Encoding标头和协商响应的编码进行一些研究。通常,内容编码是通过使用第三方模块(如 Apache 的 mod_deflate)来完成的。虽然我不熟悉 S3 在这方面的选项,但我怀疑您需要自己实施协商。

总而言之:在不先与客户端清除的情况下发送编码内容不是一个好主意。

于 2012-08-28T15:52:22.763 回答
1
  1. 你有 CSS / minfied CSS ( example.css[247 kb])。
  2. 使用 cmdgzip -9 example.css和隐蔽文件将类似于example.css.gz[44 kb]。
  3. 将文件重命名example.css.gzexample.css.
  4. 将文件上传到 S3 存储桶并在属性中单击元数据。
  5. 添加新的元数据标签、选择Context-Encoding 和值gzip
  6. 现在你的 CSS 和 gzip 都会被压缩。

来源: http ://www.rightbrainnetworks.com/blog/serving-compressed-gzipped-static-files-from-amazon-s3-or-cloudfront/

于 2016-01-22T08:33:20.593 回答