我创建了一个托管在S3 Bucket上的静态网站。我的资产文件(css和js文件)被缩小并用gzip压缩。文件名本身为file_gz.js
或file_gz.css
,并附带Content-Encoding: gzip
标题。
到目前为止,我已经在各种浏览器上测试了网站,它运行正常。资产以压缩版本提供,页面看起来没有任何不同。
我看到的唯一问题是,由于这是一个S3存储桶,因此当客户端(浏览器)不支持gzip编码时,没有故障保护。相反,HTTP请求将失败,并且不会对页面应用样式或javascript增强。
通过设置Content-Encoding: gzip
,是否有人知道任何问题?所有浏览器都支持这个吗?我需要附加任何其他标题才能使其正常工作吗?
答案 0 :(得分:13)
现代浏览器几乎全面支持编码内容。但是,假设所有用户代理都会这样做是不安全的。您的实现问题是它完全忽略了HTTP的内置方法来避免这个问题:内容协商。你有几个选择:
您可以继续关注此问题,并希望访问您的内容的每个用户代理都能够解码您的gzip资源。不幸的是,几乎肯定不会是这种情况;浏览器不是那里唯一的用户代理,解决问题的“一刀切”方法很少是一个好主意。
实施解决方案以协商您是否使用Accept-Encoding
标头提供gzip压缩响应。如果客户端根本没有指定此标头或指定它但未提及gzip,则可以相当确定用户将无法解码gzip压缩响应。在这些情况下,您需要发送未压缩的版本。
内容协商的细节超出了本答复的范围。您需要对如何解析Accept-Encoding
标头并协商响应的编码进行一些研究。通常,内容编码是通过使用Apache的mod_deflate等第三方模块来完成的。虽然我不熟悉S3在这方面的选择,但我怀疑你需要自己实施谈判。
总结:发送编码内容而不先用客户端清除它不是一个好主意。
答案 1 :(得分:1)
example.css
[247 kb])。gzip -9 example.css
和隐蔽文件将类似于example.css.gz
[44 kb]。example.css.gz
重命名为example.css
。Context-Encoding
和值gzip
。